Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Memahami Penghias Python: Penyelaman Dalam

Memahami Penghias Python: Penyelaman Dalam

Barbara Streisand
Barbara Streisandasal
2024-10-30 08:22:28343semak imbas

Penghias Python ialah alat berkuasa yang membolehkan kami mengubah suai atau meningkatkan tingkah laku fungsi atau kaedah. Kes penggunaan biasa termasuk pengelogan, kebenaran dan banyak lagi.
Walau bagaimanapun, apabila diminta untuk menentukan penghias, ramai yang mungkin berkata,

Ia adalah pembalut untuk satu fungsi.

Walaupun ini betul dari segi teknikal, banyak lagi yang berlaku di bawah hud.

Membedah Penghias Mudah
Mari kita terokai contoh mudah:

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Before calling the function")
        result = func(*args, **kwargs)
        print("After calling the function")
        return result
    return wrapper

@my_decorator
def say_hello(name):
    print(f"Hello, {name}!")

Di sini, my_decorator ialah penghias untuk fungsi say_hello. Apabila say_hello ditakrifkan, ia dihantar secara automatik kepada my_decorator, mengubah panggilan fungsi menjadi:
say_hello = my_decorator(say_hello)

Bilakah Transformasi Ini Berlaku?
Transformasi ini berlaku semasa penyusunan kod, khususnya pada masa definisi fungsi—bukan pada masa pelaksanaan.

Merungkai Kod
Untuk memahami cara penghias berfungsi pada tahap yang lebih rendah, kita boleh menggunakan modul dis untuk memeriksa kod bait fungsi yang dihias:

import dis

@my_decorator
def say_hello(name):
    print(f"Hello, {name}!")

dis.dis(say_hello)

Pecahan Bytecode

Keluaran dis.dis(say_hello) mungkin kelihatan seperti ini:

Understanding Python Decorators: A Deep Dive
Penjelasan tentang Bytecode

  1. Sebelum Memanggil Fungsi

    • LOAD_GLOBAL: Memuatkan fungsi cetakan.
    • LOAD_CONST: Memuatkan mesej 'Sebelum memanggil fungsi'.
    • FUNGSI_PANGGILAN: Cetakan panggilan.
    • POP_TOP: Membuang nilai pulangan.
  2. Memanggil Fungsi Asal

    • LOAD_DEREF: Memuatkan fungsi asal (func) yang ditangkap oleh penutupan.
    • LOAD_FAST: Memuatkan argumen kedudukan dan kata kunci.
    • BUILD_MAP: Mencipta kamus baharu untuk hujah kata kunci.
    • CALL_FUNCTION_EX: Memanggil fungsi asal dengan argumen.
    • STORE_FAST: Menyimpan hasil dalam pembolehubah setempat.
  3. Selepas Memanggil Fungsi

    • Sama seperti bahagian pertama, ia memanggil cetakan untuk mengeluarkan 'Selepas memanggil fungsi'.
    • Mengembalikan Keputusan
    • Memuatkan pembolehubah hasil dan mengembalikannya.

Kesimpulan
Penghias Python lebih daripada sekadar pembungkus fungsi; ia membolehkan kita mengubah suai tingkah laku fungsi pada masa definisi. Dengan memahami cara ia berfungsi dan meneliti kod bait, kami boleh menggunakan penghias dengan lebih berkesan dalam projek kami.

Itu sahaja buat masa ini! Jika ada perkara lain yang anda ingin saya selami, beritahu saya!

Atas ialah kandungan terperinci Memahami Penghias Python: Penyelaman Dalam. 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