Penghias dalam Python adalah cara yang kuat dan elegan untuk mengubah suai atau meningkatkan tingkah laku fungsi atau kelas tanpa mengubah kod sumber mereka secara langsung. Mereka pada dasarnya berfungsi yang mengambil fungsi lain sebagai hujah dan memperluaskan atau mengubah tingkah lakunya. Penghias membolehkan anda membungkus fungsi lain untuk melaksanakan kod sebelum dan selepas fungsi yang dibungkus berjalan.
Untuk membuat penghias, anda boleh mengikuti langkah -langkah ini:
Berikut adalah contoh cara membuat penghias mudah:
<code class="python">def my_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper @my_decorator def say_hello(): print("Hello!") say_hello()</code>
Dalam contoh ini, my_decorator
adalah penghias, dan say_hello
adalah fungsi yang dihiasi. Apabila say_hello
dipanggil, ia akan melaksanakan kod dalam fungsi wrapper
.
Penghias memberikan beberapa manfaat utama dalam pengaturcaraan Python:
@decorator
jelas dan ringkas, menjadikan kod lebih mudah dibaca dan difahami.Penghias boleh digunakan untuk mengubah suai tingkah laku fungsi dalam pelbagai cara. Berikut adalah beberapa aplikasi biasa:
Pembalakan : Penghias boleh log panggilan fungsi, input, output, dan masa pelaksanaan untuk tujuan debug dan pemantauan.
<code class="python">def log_decorator(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__}") result = func(*args, **kwargs) print(f"{func.__name__} finished execution") return result return wrapper @log_decorator def add(a, b): return ab</code>
Masa : Anda boleh menggunakan penghias untuk mengukur masa pelaksanaan fungsi, yang berguna untuk pengoptimuman prestasi.
<code class="python">import time def timer_decorator(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"{func.__name__} took {end_time - start_time} seconds to run.") return result return wrapper @timer_decorator def slow_function(): time.sleep(2) print("Slow function executed")</code>
Pengesahan dan Kebenaran : Penghias boleh digunakan untuk memeriksa sama ada pengguna disahkan sebelum membenarkan akses kepada fungsi tertentu.
<code class="python">def requires_auth(func): def wrapper(*args, **kwargs): if not authenticated: raise PermissionError("Authentication required") return func(*args, **kwargs) return wrapper @requires_auth def protected_function(): print("This function is protected")</code>
Memoisasi : Penghias boleh cache hasil panggilan fungsi mahal untuk meningkatkan prestasi.
<code class="python">def memoize(func): cache = {} def wrapper(*args): if args in cache: return cache[args] result = func(*args) cache[args] = result return result return wrapper @memoize def fibonacci(n): if n </code>
Mari kita pertimbangkan contoh praktikal untuk melaksanakan penghias untuk hasil caching, yang dapat meningkatkan prestasi fungsi -fungsi yang mahal. Kami akan menggunakan fungsi Fibonacci untuk menunjukkan ini:
<code class="python">def memoize(func): cache = {} def wrapper(*args): if args in cache: print(f"Returning cached result for {args}") return cache[args] result = func(*args) cache[args] = result print(f"Caching result for {args}") return result return wrapper @memoize def fibonacci(n): if n </code>
Dalam contoh ini:
memoize
mengekalkan cache
kamus untuk menyimpan hasil panggilan fungsi. Fungsi wrapper
memeriksa jika keputusan untuk satu set argumen yang diberikan sudah ada dalam cache. Sekiranya ia, ia mengembalikan hasil cache; Jika tidak, ia mengira hasilnya, cache, dan kemudian mengembalikannya.fibonacci
mengira nombor Fibonacci secara rekursif. Tanpa memoisasi, ini akan membawa kepada banyak pengiraan yang berlebihan, terutamanya untuk nombor yang lebih besar. Penghias @memoize
yang digunakan untuk fibonacci
memastikan bahawa setiap nombor Fibonacci dikira hanya sekali dan digunakan semula untuk panggilan berikutnya.fibonacci(10)
mula -mula dipanggil, penghias akan mengira dan cache hasilnya. Pada panggilan kedua ke fibonacci(10)
, ia akan mengambil keputusan dari cache, menunjukkan peningkatan prestasi.Contoh ini menggambarkan bagaimana penghias boleh digunakan untuk meningkatkan prestasi fungsi dengan melaksanakan memoisasi, yang merupakan teknik biasa dalam pengoptimuman dan senario pengaturcaraan dinamik.
Atas ialah kandungan terperinci Apakah penghias di Python? Bagaimana anda mencipta satu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!