Petua Lanjutan untuk Memperbaik Kod Python Anda
Kesederhanaan Python membolehkan pembangun menulis program berfungsi dengan cepat, tetapi teknik lanjutan boleh menjadikan kod anda lebih cekap, boleh diselenggara dan elegan. Petua dan contoh lanjutan ini akan membawa kemahiran Python anda ke peringkat seterusnya.
1. Memanfaatkan Penjana untuk Kecekapan Memori
Apabila bekerja dengan set data yang besar, gunakan penjana dan bukannya senarai untuk menjimatkan memori:
# List consumes memory upfront numbers = [i**2 for i in range(1_000_000)] # Generator evaluates lazily numbers = (i**2 for i in range(1_000_000)) # Iterate over the generator for num in numbers: print(num) # Processes one item at a time
Sebab: Penjana mencipta item dengan cepat, mengelakkan keperluan untuk menyimpan keseluruhan urutan dalam ingatan.
2. Gunakan kelas data untuk Kelas Mudah
Untuk kelas yang menyimpan data terutamanya, kelas data mengurangkan kod boilerplate:
from dataclasses import dataclass @dataclass class Employee: name: str age: int position: str # Instead of defining __init__, __repr__, etc. emp = Employee(name="Alice", age=30, position="Engineer") print(emp) # Employee(name='Alice', age=30, position='Engineer')
Sebab: kelas data mengendalikan __init__ , __repr__ dan kaedah lain secara automatik.
3. Pengurus Konteks Induk (dengan Penyata)
Pengurus konteks tersuai memudahkan pengurusan sumber:
from contextlib import contextmanager @contextmanager def open_file(file_name, mode): file = open(file_name, mode) try: yield file finally: file.close() # Usage with open_file("example.txt", "w") as f: f.write("Hello, world!")
Sebab: Pengurus konteks memastikan pembersihan yang betul (cth., menutup fail) walaupun pengecualian berlaku.
4. Manfaatkan Anotasi Fungsi
Anotasi meningkatkan kejelasan dan membolehkan analisis statik:
def calculate_area(length: float, width: float) -> float: return length * width # IDEs and tools like MyPy can validate these annotations area = calculate_area(5.0, 3.2)
Sebab: Anotasi membuat kod pendokumentasian sendiri dan membantu menangkap ralat jenis semasa pembangunan.
5. Mohon Penghias untuk Penggunaan Semula Kod
Penghias memanjangkan atau mengubah suai fungsi tanpa mengubah fungsi asal:
def log_execution(func): def wrapper(*args, **kwargs): print(f"Executing {func.__name__} with {args}, {kwargs}") return func(*args, **kwargs) return wrapper @log_execution def add(a, b): return a + b result = add(3, 5) # Output: Executing add with (3, 5), {}
Sebab: Penghias mengurangkan pertindihan untuk tugas seperti pengelogan, pengesahan atau fungsi pemasaan.
6. Gunakan functools untuk Kefungsian Pesanan Tinggi
Modul functools memudahkan tingkah laku fungsi yang kompleks:
from functools import lru_cache @lru_cache(maxsize=100) def fibonacci(n): if n < 2: return n return fibonacci(n - 1) + fibonacci(n - 2) print(fibonacci(50)) # Efficient due to caching
Sebab: Fungsi seperti lru_cache mengoptimumkan prestasi dengan menghafal hasil panggilan fungsi yang mahal.
7. Fahami Kuasa koleksi
Modul koleksi menawarkan struktur data lanjutan:
from collections import defaultdict, Counter # defaultdict with default value word_count = defaultdict(int) for word in ["apple", "banana", "apple"]: word_count[word] += 1 print(word_count) # {'apple': 2, 'banana': 1} # Counter for frequency counting freq = Counter(["apple", "banana", "apple"]) print(freq.most_common(1)) # [('apple', 2)]
Sebab: lalai dan Kaunter memudahkan tugas seperti mengira kejadian.
8. Selari dengan serentak.masa hadapan
Untuk tugas terikat CPU atau terikat IO, pelaksanaan selari mempercepatkan pemprosesan:
from concurrent.futures import ThreadPoolExecutor def square(n): return n * n with ThreadPoolExecutor(max_workers=4) as executor: results = executor.map(square, range(10)) print(list(results)) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Sebab: concurrent.futures menjadikan multi-threading dan multi-processing lebih mudah.
9. Gunakan pathlib untuk Operasi Fail
Modul pathlib menyediakan cara intuitif dan berkuasa untuk bekerja dengan laluan fail:
from pathlib import Path path = Path("example.txt") # Write to a file path.write_text("Hello, pathlib!") # Read from a file content = path.read_text() print(content) # Check if a file exists if path.exists(): print("File exists")
Sebab: pathlib lebih mudah dibaca dan serba boleh berbanding os dan os.path.
10. Tulis Ujian Unit dengan Mengejek
Uji sistem kompleks dengan mengejek kebergantungan:
# List consumes memory upfront numbers = [i**2 for i in range(1_000_000)] # Generator evaluates lazily numbers = (i**2 for i in range(1_000_000)) # Iterate over the generator for num in numbers: print(num) # Processes one item at a time
Sebab: Mengejek mengasingkan kod yang sedang diuji, memastikan kebergantungan luaran tidak mengganggu ujian anda.
Kesimpulan
Menguasai teknik lanjutan ini akan meningkatkan kemahiran pengekodan Python anda. Masukkannya ke dalam aliran kerja anda untuk menulis kod yang bukan sahaja berfungsi tetapi juga cekap, boleh diselenggara dan Pythonic. Selamat mengekod!
Atas ialah kandungan terperinci Petua Lanjutan untuk Memperbaik Kod Python Anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?

Cara Bekerja Dengan Dokumen PDF Menggunakan Python

Cara Cache Menggunakan Redis dalam Aplikasi Django

Memperkenalkan Toolkit Bahasa Alam (NLTK)

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?
