Rumah > pembangunan bahagian belakang > Tutorial Python > Memahami tanggapan kompleks dalam Python: soalan untuk ditanya kepada diri sendiri dan cara menggunakannya dengan contoh

Memahami tanggapan kompleks dalam Python: soalan untuk ditanya kepada diri sendiri dan cara menggunakannya dengan contoh

DDD
Lepaskan: 2024-10-24 06:35:02
asal
496 orang telah melayarinya

Comprendre les notions complexes en Python : questions à se poser et comment les utiliser avec des exemples

Python ialah bahasa yang serba boleh dan boleh diakses, menjadikannya pilihan popular untuk pemula. Walau bagaimanapun, ia juga menawarkan ciri lanjutan yang mungkin kelihatan rumit pada mulanya. Memahami konsep kompleks ini adalah penting untuk menulis kod Python yang cekap, boleh diselenggara dan berprestasi.

Dalam artikel ini, kami akan meneroka beberapa tanggapan yang lebih kompleks dalam Python, seperti penjana, penghias, pengurus konteks, ungkapan lambda dan metaclass. Kami akan membincangkan soalan untuk ditanya tentang masa untuk menggunakannya dan menyediakan sampel kod untuk menggambarkan penggunaannya.

1. Penjana

Apakah penjana?
Penjana ialah fungsi yang membolehkan anda membuat lelaran tersuai menggunakan kata kunci hasil. Daripada mengembalikan satu nilai, penjana menghasilkan satu siri nilai semasa ia berulang.

Bila hendak menggunakannya?
Apabila anda bekerja dengan jujukan data yang besar dan ingin menjimatkan memori.
Apabila anda memerlukan pengiraan yang malas, iaitu anda tidak mahu mengira semua nilai terlebih dahulu.
Untuk mencipta strim data tak terhingga atau berkemungkinan tak terhingga.
Contoh kod

def compteur_infini():
    n = 0
    while True:
        yield n
        n += 1

# Utilisation
compteur = compteur_infini()
print(next(compteur))  # Sortie: 0
print(next(compteur))  # Sortie: 1
print(next(compteur))  # Sortie: 2

Salin selepas log masuk
Salin selepas log masuk

Mengapa ia berkesan?
Setiap panggilan ke seterusnya(kaunter) melaksanakan fungsi sehingga penyataan hasil seterusnya, mengembalikan nilai dan menggantung keadaan fungsi sehingga panggilan seterusnya.

2. Penghias

Apakah itu penghias?
Penghias ialah fungsi yang membolehkan anda mengubah suai atau memperkayakan gelagat fungsi atau kaedah lain tanpa mengubah kod sumbernya. Ia memerlukan fungsi sebagai input, menambah ciri padanya dan mengembalikan fungsi baharu.

Bila hendak menggunakannya?
Untuk memperkayakan fungsi dengan kod tambahan (pengelogan, kawalan akses, pemasaan).
Untuk mengelakkan pertindihan kod apabila berbilang fungsi memerlukan tingkah laku yang serupa.
Untuk memisahkan kebimbangan, pastikan kod utama bersih.
Contoh kod

def journalisation(func):
    def wrapper(*args, **kwargs):
        print(f"Appel de {func.__name__} avec {args} {kwargs}")
        result = func(*args, **kwargs)
        print(f"{func.__name__} a retourné {result}")
        return result
    return wrapper

@journalisation
def addition(a, b):
    return a + b

# Utilisation
resultat = addition(5, 3)
# Sortie:
# Appel de addition avec (5, 3) {}
# addition a retourné 8

Salin selepas log masuk
Salin selepas log masuk

Mengapa ia berkesan?
Penghias pembalakan membungkus fungsi tambah, menambah mesej sebelum dan selepas ia dilaksanakan.

3. Pengurus Konteks

Apakah itu pengurus konteks?
Pengurus konteks ialah struktur yang membolehkan anda mengurus sumber (fail, sambungan, dll.) dengan memastikan ia dimulakan dan dibersihkan dengan betul. Ia menggunakan kaedah masuk dan keluar dan biasanya digunakan dengan pernyataan dengan.

Bila hendak menggunakannya?
Untuk mengurus sumber yang memerlukan pembersihan (tutup fail, lepaskan sambungan).
Untuk memastikan pengecualian tidak menghalang pembersihan sumber.
Untuk meningkatkan kebolehbacaan kod apabila mengurus sumber.
Contoh kod

def compteur_infini():
    n = 0
    while True:
        yield n
        n += 1

# Utilisation
compteur = compteur_infini()
print(next(compteur))  # Sortie: 0
print(next(compteur))  # Sortie: 1
print(next(compteur))  # Sortie: 2

Salin selepas log masuk
Salin selepas log masuk

Mengapa ia berkesan?
Pengurus konteks memastikan bahawa fail ditutup secara automatik, walaupun pengecualian berlaku semasa menulis.

4. Ungkapan Lambda

Apakah ungkapan lambda?
Ungkapan lambda ialah fungsi tanpa nama yang ditakrifkan dengan kata kunci lambda. Ia boleh mengambil berbilang argumen tetapi hanya boleh mengandungi satu ungkapan.

Bila hendak menggunakannya?
Untuk mencipta fungsi yang cepat dan mudah, biasanya sebagai hujah kepada fungsi lain.
Apabila definisi fungsi yang lengkap akan menjadi terlalu bertele-tele untuk tugasan yang mudah.
Untuk pengiraan mudah dalam struktur data.
Contoh kod

def journalisation(func):
    def wrapper(*args, **kwargs):
        print(f"Appel de {func.__name__} avec {args} {kwargs}")
        result = func(*args, **kwargs)
        print(f"{func.__name__} a retourné {result}")
        return result
    return wrapper

@journalisation
def addition(a, b):
    return a + b

# Utilisation
resultat = addition(5, 3)
# Sortie:
# Appel de addition avec (5, 3) {}
# addition a retourné 8

Salin selepas log masuk
Salin selepas log masuk

Mengapa ia berkesan?
Ungkapan lambda lambda x:x*2 dihantar ke peta, yang digunakan pada setiap elemen dalam senarai.

  1. Metaclass Apakah metaclass? Metaclass ialah kelas yang mentakrifkan tingkah laku kelas itu sendiri. Dalam Python, semuanya adalah objek, termasuk kelas. Metaclasses membolehkan anda mengawal penciptaan kelas, dengan mengubah suai kelakuannya atau menambah atribut.

Bila hendak menggunakannya?
Untuk mengubah suai penciptaan kelas, contohnya dengan menyimpan kelas atau mengubah suainya.
Untuk melaksanakan Singleton, ORM atau rangka kerja yang memerlukan pengubahsuaian kelas dinamik.
Apabila penghias kelas tidak mencukupi untuk tahap kawalan yang diingini.
Contoh kod

class GestionFichier:
    def __init__(self, nom_fichier, mode):
        self.nom_fichier = nom_fichier
        self.mode = mode
        self.fichier = None

    def __enter__(self):
        self.fichier = open(self.nom_fichier, self.mode)
        return self.fichier

    def __exit__(self, exc_type, exc_val, exc_tb):
        if self.fichier:
            self.fichier.close()

# Utilisation
with GestionFichier('test.txt', 'w') as f:
    f.write('Bonjour, monde!')

Salin selepas log masuk

Mengapa ia berkesan?
Metaclass RegistrationClasses mengubah suai kaedah baharu untuk menyimpan setiap kelas yang dibuat dalam pendaftaran.

Kesimpulan

Tanggapan kompleks dalam Python, seperti penjana, penghias, pengurus konteks, ungkapan lambda dan kelas meta, menawarkan kuasa dan fleksibiliti yang besar untuk pembangun berpengalaman. Dengan memahami masa dan cara menggunakannya, anda boleh menulis kod yang lebih cekap, boleh dibaca dan boleh diselenggara.

Apabila anda menghadapi masalah yang rumit, tanya diri anda soalan berikut:

Adakah saya perlu mengurus sumber dengan selamat? (Pengurus Konteks)
Bolehkah saya mendapat manfaat daripada pengiraan yang malas? (Penjana)
Bolehkah saya memperkayakan kelakuan sesuatu fungsi tanpa mengubah suainya? (Penghias)
Adakah saya memerlukan fungsi mudah untuk operasi sekali sahaja? (Ungkapan Lambda)
Patutkah saya mengawal penciptaan kelas? (Metaclasses)
Dengan menjawab soalan ini, anda boleh menentukan sama ada mana-mana konsep kompleks ini sesuai untuk situasi anda.

7. Sumber Tambahan

Buku:
Fluent Python oleh Luciano Ramalho.
Python Berkesan oleh Brett Slatkin.
Dokumentasi rasmi:
Penjana
Penghias
Pengurus Konteks
Ungkapan Lambda
Metaclasses
Tutorial:
Memahami Penjana dalam Python
Panduan Penghias untuk Python
Menggunakan pengurus konteks
Terima kasih kerana membaca! Jangan ragu untuk berkongsi pengalaman anda sendiri atau bertanya soalan dalam ulasan.

Atas ialah kandungan terperinci Memahami tanggapan kompleks dalam Python: soalan untuk ditanya kepada diri sendiri dan cara menggunakannya dengan contoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan