Memahami Penghias Python: Penyelaman Dalam

Barbara Streisand
Lepaskan: 2024-10-30 08:22:28
asal
365 orang telah melayarinya

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}!")
Salin selepas log masuk

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!