Rumah > pembangunan bahagian belakang > Tutorial Python > Penghias Python: Lebih Pemahaman tentang Peningkatan Kefungsian

Penghias Python: Lebih Pemahaman tentang Peningkatan Kefungsian

Linda Hamilton
Lepaskan: 2024-11-19 22:09:02
asal
1012 orang telah melayarinya

Python Decorators: More Understanding into Functionality Enhancement

Mari kita melampaui asas untuk memahami penghias secara mendalam. Penghias bukan sahaja mengenai "lapisan tambahan" tetapi menawarkan cara yang canggih untuk menambah fungsi pada fungsi secara dinamik, menjadikannya sangat mudah disesuaikan dan berkuasa.


1. Apakah itu Penghias?

Pada dasarnya, penghias ialah fungsi tertib tinggi—fungsi yang menerima fungsi lain sebagai hujah, menambah fungsi dan mengembalikan fungsi baharu. Ini membolehkan kami "menghias" fungsi asal dengan keupayaan tambahan, meninggalkan fungsi asal tidak diubah.

Rekap Sintaks:

@decorator_name
def my_function():
    pass
Salin selepas log masuk
Salin selepas log masuk

Menggunakan @decorator_name sebelum my_function ialah singkatan untuk:

my_function = decorator_name(my_function)
Salin selepas log masuk

2. Membina Penghias Asas

Mari bina penghias ringkas yang log apabila fungsi dipanggil.

def log_call(func):
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__}")
        return func(*args, **kwargs)
    return wrapper

@log_call
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")  # Outputs: Calling greet, then Hello, Alice!
Salin selepas log masuk
  • log_call ialah penghias yang membalut salam.
  • *args dan `kwargs`** memastikan ia berfungsi dengan sebarang bilangan hujah kedudukan atau kata kunci.

3. Kes Penggunaan Dunia Sebenar

Penghias biasanya digunakan untuk:

  • Kawalan Akses: mis., menyemak kebenaran pengguna.
  • Caching: Menyimpan hasil panggilan fungsi yang mahal.
  • Mekanisme Cuba Semula: Mencuba semula fungsi secara automatik apabila gagal.
  • Pengesahan Input: Menyemak argumen sebelum fungsi dijalankan.

4. Penghias dengan Hujah

Kadangkala, penghias memerlukan parameter tambahan. Dalam kes ini, kami menambah fungsi luar untuk menghantar parameter kepada penghias.

Contoh:

def repeat(times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(times):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def say_hello():
    print("Hello!")

say_hello()  # Outputs "Hello!" three times
Salin selepas log masuk

Di sini, ulangi ialah kilang penghias yang menghasilkan penghias berdasarkan hujah times.


5. Penghias Susun

Anda boleh menyusun berbilang penghias pada satu fungsi, mewujudkan rangkaian gelagat yang berkuasa.

Contoh:

def make_bold(func):
    def wrapper():
        return "<b>" + func() + "</b>"
    return wrapper

def make_italic(func):
    def wrapper():
        return "<i>" + func() + "</i>"
    return wrapper

@make_bold
@make_italic
def greet():
    return "Hello!"

print(greet())  # Outputs: <b><i>Hello!</i></b>
Salin selepas log masuk

Balut tindanan @make_bold dan @make_italic memberi salam dalam kedua-dua teg tebal dan condong.


6. Memelihara Metadata dengan functools.wraps

Apabila menghias fungsi, anda selalunya mahukan metadata fungsi asal (seperti namanya dan docstring) dikekalkan. Gunakan functools.wraps untuk memastikan pembungkus anda tidak menimpa butiran ini.

from functools import wraps

def log_call(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__}")
        return func(*args, **kwargs)
    return wrapper
Salin selepas log masuk

@wraps(func) memastikan nama func dan docstring dikekalkan.


7. Penghias dalam Kelas

Penghias bukan hanya untuk fungsi kendiri; ia juga boleh digunakan dengan kaedah kelas.

Contoh:

@decorator_name
def my_function():
    pass
Salin selepas log masuk
Salin selepas log masuk

Penghias require_auth menyemak sama ada pengguna disahkan sebelum membenarkan akses kepada kaedah access_dashboard.


Kesimpulan: Tambah Kod Anda dengan Penghias

Penghias ialah bahagian Python yang tidak ternilai, membolehkan anda mempertingkat, mengubah suai dan mengawal tingkah laku fungsi dengan cara yang fleksibel dan boleh digunakan semula. Mereka menjadikan kod anda lebih ekspresif, modular dan elegan. Dengan penghias, anda bukan sahaja menambah fungsi—anda memperhalusi dan memperkayakan pangkalan kod anda.

Atas ialah kandungan terperinci Penghias Python: Lebih Pemahaman tentang Peningkatan Kefungsian. 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