cari
Rumahpembangunan bahagian belakangTutorial PythonPenghias Python Lanjutan: Meningkatkan Kod Anda

Advanced Python Decorators: Elevating Your Code

Bayangkan anda seorang chef di dapur yang sibuk. Anda mempunyai resipi—fungsi, jika anda mahu. Lama kelamaan, anda mendapati kebanyakan hidangan anda memerlukan sedikit minyak zaitun, secubit garam atau taburan herba sebelum dihidangkan. Daripada menambahkan sentuhan kemasan ini secara manual pada setiap hidangan, bukankah lebih mudah untuk mempunyai pembantu yang menggunakannya secara automatik? Itulah yang boleh dilakukan oleh penghias Python untuk kod anda—tambahkan fungsi dengan cara yang elegan, boleh diguna semula dan ekspresif.

Dalam artikel ini, kami akan meneroka dunia penghias Python termaju. Kami akan melangkaui perkara asas, menyelam ke dalam penghias berparameter, penghias boleh tindanan dan juga penghias dengan kelas. Kami juga akan menyerlahkan amalan terbaik dan perangkap untuk dielakkan. sedia? Jom mula memasak!

Asas Disemak Semula

Sebelum menyelam ke hujung yang dalam, mari lihat semula asasnya. Penghias dalam Python hanyalah fungsi yang mengambil fungsi (atau kaedah) lain sebagai hujah, menambahnya dan mengembalikan fungsi baharu. Berikut ialah contoh:

# Basic decorator example
def simple_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__}...")
        result = func(*args, **kwargs)
        print(f"{func.__name__} finished.")
        return result
    return wrapper

@simple_decorator
def say_hello():
    print("Hello, world!")

say_hello()

Output:

Calling say_hello...
Hello, world!
say_hello finished.

Sekarang, mari beralih kepada kes penggunaan lanjutan.

Penghias Berparameter

Kadangkala, seorang penghias perlu menerima hujahnya sendiri. Sebagai contoh, bagaimana jika kita mahukan penghias yang merekodkan mesej pada tahap yang berbeza (INFO, DEBUG, ERROR)?

# Parameterized decorator example
def log(level):
    def decorator(func):
        def wrapper(*args, **kwargs):
            print(f"[{level}] Calling {func.__name__}...")
            result = func(*args, **kwargs)
            print(f"[{level}] {func.__name__} finished.")
            return result
        return wrapper
    return decorator

@log("INFO")
def process_data():
    print("Processing data...")

process_data()

Output:

[INFO] Calling process_data...
Processing data...
[INFO] process_data finished.

Struktur berlapis ini—fungsi mengembalikan penghias—adalah kunci untuk mencipta penghias berparameter yang fleksibel.

Penghias Boleh Bertindan

Python membenarkan berbilang penghias digunakan pada satu fungsi. Mari cipta dua penghias dan susun mereka.

# Stackable decorators

def uppercase(func):
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        return result.upper()
    return wrapper

def exclaim(func):
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        return result + "!!!"
    return wrapper

@uppercase
@exclaim
def greet():
    return "hello"

print(greet())

Output:

HELLO!!!

Di sini, penghias digunakan dengan cara dari bawah ke atas: @exclaim wraps greet, dan @huruf besar membalut hasilnya.

Menggunakan Kelas sebagai Penghias

Ciri Python yang kurang dikenali ialah kelas boleh digunakan sebagai penghias. Ini amat berguna apabila anda perlu mengekalkan keadaan.

# Class-based decorator
class CountCalls:
    def __init__(self, func):
        self.func = func
        self.call_count = 0

    def __call__(self, *args, **kwargs):
        self.call_count += 1
        print(f"Call {self.call_count} to {self.func.__name__}")
        return self.func(*args, **kwargs)

@CountCalls
def say_hello():
    print("Hello!")

say_hello()
say_hello()

Output:

Call 1 to say_hello
Hello!
Call 2 to say_hello
Hello!

Di sini, kaedah panggilan membolehkan kelas berkelakuan seperti fungsi, membenarkannya membalut fungsi sasaran dengan lancar.

Penghias untuk Kaedah

Penghias berfungsi dengan baik dengan kaedah dalam kelas. Walau bagaimanapun, mengendalikan diri dengan betul adalah penting.

# Method decorator example
def log_method(func):
    def wrapper(self, *args, **kwargs):
        print(f"Method {func.__name__} called on {self}")
        return func(self, *args, **kwargs)
    return wrapper

class Greeter:
    @log_method
    def greet(self, name):
        print(f"Hello, {name}!")

obj = Greeter()
obj.greet("Alice")

Output:

Method greet called on <__main__.greeter object at>
Hello, Alice!
</__main__.greeter>

Menggabungkan Penghias dengan Pengurus Konteks

Kadangkala, anda perlu menyepadukan penghias dengan pengurusan sumber. Sebagai contoh, mari buat penghias yang menggandakan pelaksanaan fungsi.

import time

# Timing decorator
def time_it(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} took {end - start:.2f} seconds")
        return result
    return wrapper

@time_it
def slow_function():
    time.sleep(2)
    print("Done sleeping!")

slow_function()

Output:

# Basic decorator example
def simple_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__}...")
        result = func(*args, **kwargs)
        print(f"{func.__name__} finished.")
        return result
    return wrapper

@simple_decorator
def say_hello():
    print("Hello, world!")

say_hello()

Amalan Terbaik

Apabila bekerja dengan penghias, mengingati kebolehbacaan dan kebolehselenggaraan adalah penting. Berikut ialah beberapa petua:

  • Gunakan functools.wraps: Ini mengekalkan metadata fungsi asal.
Calling say_hello...
Hello, world!
say_hello finished.
  • Uji Dengan Teliti: Penghias boleh memperkenalkan pepijat halus, terutamanya apabila merantai berbilang penghias.

  • Penghias Dokumen: Dokumen dengan jelas perkara yang dilakukan oleh setiap penghias dan parameter yang dijangkakan.

  • Elakkan Penggunaan Berlebihan: Walaupun penghias berkuasa, penggunaan yang berlebihan boleh menyebabkan kod sukar untuk diikuti.

Membungkus

Penghias ialah salah satu ciri Python yang paling ekspresif. Mereka membenarkan anda memanjangkan dan mengubah suai tingkah laku dengan cara yang bersih dan boleh diguna semula. Daripada penghias parameter kepada pelaksanaan berasaskan kelas, kemungkinannya tidak berkesudahan. Sambil anda mengasah kemahiran anda, anda akan mendapati diri anda memanfaatkan penghias untuk menulis lebih bersih, lebih kod Pythonic—dan mungkin, seperti chef yang hebat, mencipta sentuhan istimewa anda dalam setiap resipi yang anda hasilkan.

nota: Kandungan bantuan AI

Atas ialah kandungan terperinci Penghias Python Lanjutan: Meningkatkan Kod 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
Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail TeksCara Menggunakan Python untuk Mencari Pengagihan Zipf Fail TeksMar 05, 2025 am 09:58 AM

Tutorial ini menunjukkan cara menggunakan Python untuk memproses konsep statistik undang -undang ZIPF dan menunjukkan kecekapan membaca dan menyusun fail teks besar Python semasa memproses undang -undang. Anda mungkin tertanya -tanya apa maksud pengedaran ZIPF istilah. Untuk memahami istilah ini, kita perlu menentukan undang -undang Zipf. Jangan risau, saya akan cuba memudahkan arahan. Undang -undang Zipf Undang -undang Zipf hanya bermaksud: Dalam korpus bahasa semulajadi yang besar, kata -kata yang paling kerap berlaku muncul kira -kira dua kali lebih kerap sebagai kata -kata kerap kedua, tiga kali sebagai kata -kata kerap ketiga, empat kali sebagai kata -kata kerap keempat, dan sebagainya. Mari kita lihat contoh. Jika anda melihat corpus coklat dalam bahasa Inggeris Amerika, anda akan melihat bahawa perkataan yang paling kerap adalah "th

Cara memuat turun fail di pythonCara memuat turun fail di pythonMar 01, 2025 am 10:03 AM

Python menyediakan pelbagai cara untuk memuat turun fail dari Internet, yang boleh dimuat turun melalui HTTP menggunakan pakej Urllib atau Perpustakaan Permintaan. Tutorial ini akan menerangkan cara menggunakan perpustakaan ini untuk memuat turun fail dari URL dari Python. Permintaan Perpustakaan Permintaan adalah salah satu perpustakaan yang paling popular di Python. Ia membolehkan menghantar permintaan HTTP/1.1 tanpa menambahkan rentetan pertanyaan secara manual ke URL atau pengekodan data pos. Perpustakaan Permintaan boleh melaksanakan banyak fungsi, termasuk: Tambah data borang Tambah fail berbilang bahagian Akses data tindak balas python Buat permintaan kepala

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?Mar 10, 2025 pm 06:54 PM

Artikel ini menerangkan cara menggunakan sup yang indah, perpustakaan python, untuk menghuraikan html. Ia memperincikan kaedah biasa seperti mencari (), find_all (), pilih (), dan get_text () untuk pengekstrakan data, pengendalian struktur dan kesilapan HTML yang pelbagai, dan alternatif (sel

Penapisan gambar di pythonPenapisan gambar di pythonMar 03, 2025 am 09:44 AM

Berurusan dengan imej yang bising adalah masalah biasa, terutamanya dengan telefon bimbit atau foto kamera resolusi rendah. Tutorial ini meneroka teknik penapisan imej di Python menggunakan OpenCV untuk menangani isu ini. Penapisan Imej: Alat yang berkuasa Penapis Imej

Cara Bekerja Dengan Dokumen PDF Menggunakan PythonCara Bekerja Dengan Dokumen PDF Menggunakan PythonMar 02, 2025 am 09:54 AM

Fail PDF adalah popular untuk keserasian silang platform mereka, dengan kandungan dan susun atur yang konsisten merentasi sistem operasi, peranti membaca dan perisian. Walau bagaimanapun, tidak seperti Python memproses fail teks biasa, fail PDF adalah fail binari dengan struktur yang lebih kompleks dan mengandungi unsur -unsur seperti fon, warna, dan imej. Mujurlah, tidak sukar untuk memproses fail PDF dengan modul luaran Python. Artikel ini akan menggunakan modul PYPDF2 untuk menunjukkan cara membuka fail PDF, mencetak halaman, dan mengekstrak teks. Untuk penciptaan dan penyuntingan fail PDF, sila rujuk tutorial lain dari saya. Penyediaan Inti terletak pada menggunakan modul luaran PYPDF2. Pertama, pasangkannya menggunakan PIP: Pip adalah p

Cara Cache Menggunakan Redis dalam Aplikasi DjangoCara Cache Menggunakan Redis dalam Aplikasi DjangoMar 02, 2025 am 10:10 AM

Tutorial ini menunjukkan cara memanfaatkan caching redis untuk meningkatkan prestasi aplikasi python, khususnya dalam rangka kerja Django. Kami akan merangkumi pemasangan Redis, konfigurasi Django, dan perbandingan prestasi untuk menyerlahkan bene

Memperkenalkan Toolkit Bahasa Alam (NLTK)Memperkenalkan Toolkit Bahasa Alam (NLTK)Mar 01, 2025 am 10:05 AM

Pemprosesan bahasa semulajadi (NLP) adalah pemprosesan bahasa manusia secara automatik atau separa automatik. NLP berkait rapat dengan linguistik dan mempunyai hubungan dengan penyelidikan dalam sains kognitif, psikologi, fisiologi, dan matematik. Dalam sains komputer

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?Mar 10, 2025 pm 06:52 PM

Artikel ini membandingkan tensorflow dan pytorch untuk pembelajaran mendalam. Ia memperincikan langkah -langkah yang terlibat: penyediaan data, bangunan model, latihan, penilaian, dan penempatan. Perbezaan utama antara rangka kerja, terutamanya mengenai grap pengiraan

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual