Rumah >pembangunan bahagian belakang >Tutorial Python >Petua Lanjutan untuk Memperbaik Kod Python Anda

Petua Lanjutan untuk Memperbaik Kod Python Anda

Patricia Arquette
Patricia Arquetteasal
2024-11-28 00:44:11286semak imbas

Advanced Tips to Improve Your Python Code

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn