Rumah > pembangunan bahagian belakang > Tutorial Python > Apakah penghias di Python? Bagaimana anda mencipta satu?

Apakah penghias di Python? Bagaimana anda mencipta satu?

James Robert Taylor
Lepaskan: 2025-03-19 11:54:34
asal
466 orang telah melayarinya

Apakah penghias di Python? Bagaimana anda mencipta satu?

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:

  1. Tentukan fungsi penghias : Tulis fungsi yang mengambil fungsi lain sebagai hujahnya.
  2. Tentukan fungsi pembalut : Di dalam fungsi penghias, tentukan fungsi pembalut yang akan membungkus fungsi asal.
  3. Jalankan fungsi yang dibungkus : Fungsi pembalut harus memanggil fungsi asal dan juga boleh melaksanakan kod tambahan sebelum dan selepas panggilan.
  4. Kembalikan pembalut : Fungsi penghias harus mengembalikan fungsi pembalut.

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>
Salin selepas log masuk

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 .

Apakah faedah yang disediakan oleh penghias dalam pengaturcaraan Python?

Penghias memberikan beberapa manfaat utama dalam pengaturcaraan Python:

  1. Kebolehgunaan semula kod : Penghias membolehkan anda menggunakan pengubahsuaian atau peningkatan yang sama kepada pelbagai fungsi tanpa mengulangi kod. Ini menggalakkan prinsip kering (jangan mengulangi diri anda).
  2. Pemisahan kebimbangan : Dengan memisahkan logik teras fungsi dari fungsi tambahan (seperti pembalakan, masa, atau pengesahan), penghias membantu mengekalkan kod yang bersih dan fokus.
  3. Kemudahan Penyelenggaraan : Oleh kerana penghias digunakan secara luaran untuk fungsi, pengubahsuaian boleh dibuat kepada penghias tanpa mengubah fungsi yang dihiasi, menjadikan penyelenggaraan lebih mudah.
  4. Fleksibiliti dan Extensibility : Penghias boleh disusun (pelbagai penghias yang digunakan untuk fungsi yang sama), dan mereka juga boleh menjadi parameterized, yang membolehkan peningkatan yang sangat fleksibel.
  5. Kebolehbacaan dan kesederhanaan : Sintaks @decorator jelas dan ringkas, menjadikan kod lebih mudah dibaca dan difahami.
  6. Pengaturcaraan berorientasikan aspek : Penghias memudahkan pelaksanaan kebimbangan silang seperti pembalakan, pemantauan prestasi, dan pemeriksaan keselamatan, yang biasa dengan pelbagai fungsi.

Bagaimanakah anda boleh menggunakan penghias untuk mengubah suai tingkah laku fungsi?

Penghias boleh digunakan untuk mengubah suai tingkah laku fungsi dalam pelbagai cara. Berikut adalah beberapa aplikasi biasa:

  1. 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>
    Salin selepas log masuk
  2. 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>
    Salin selepas log masuk
  3. 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>
    Salin selepas log masuk
  4. 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>
    Salin selepas log masuk

Bolehkah anda menerangkan contoh praktikal untuk melaksanakan penghias di Python?

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>
Salin selepas log masuk

Dalam contoh ini:

  1. Memoize Decorator : Penghias 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.
  2. Fungsi Fibonacci : Fungsi 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.
  3. Pelaksanaan : Apabila 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!

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