Penghias dalam Python ialah fungsi tertib lebih tinggi yang direka untuk meningkatkan kefungsian fungsi dan menjadikannya lebih fleksibel dan boleh dikembangkan. Artikel ini akan memberikan penjelasan mendalam tentang penghias dalam Python untuk membantu pembaca memahami dan menerapkannya dengan lebih baik.
1. Apakah itu penghias?
Penghias ialah ciri bahasa Python yang membolehkan pengguna mengubah suai gelagat fungsi atau menambah fungsi fungsi secara dinamik dan telus tanpa mengubah kod fungsi asal. Penghias pada asasnya ialah fungsi yang menerima fungsi lain sebagai parameter dan mengembalikan fungsi baharu.
2. Sintaks penghias
Sintaks penghias adalah seperti berikut:
@decorator def foo(): pass
Antaranya, decorator
ialah fungsi penghias, dan foo
adalah fungsi biasa. Apabila menggunakan sintaks @decorator
, penterjemah Python akan secara automatik menghantar fungsi foo
ke fungsi decorator
dan menetapkan nilai pulangan fungsi decorator
kepada fungsi foo
, supaya kita boleh memanggil foo
fungsi untuk memanggil fungsi yang diubah suai.
3. Senario aplikasi penghias
Senario aplikasi penghias adalah sangat luas, termasuk tetapi tidak terhad kepada aspek berikut:
Kami boleh menggunakan penghias untuk merekodkan log pelaksanaan fungsi untuk penyahpepijatan dan analisis yang lebih baik.
def log(func): def wrapper(*args, **kwargs): print(f"calling {func.__name__} with args={args}, kwargs={kwargs}") return func(*args, **kwargs) return wrapper @log def add(x, y): return x + y add(1, 2) # 输出 calling add with args=(1, 2), kwargs={} # 输出 3
Kami boleh melaksanakan fungsi pengesahan dan kebenaran pengguna melalui penghias untuk memastikan hanya pengguna yang diberi kuasa boleh mengakses sumber tertentu.
def authenticate(func): def wrapper(*args, **kwargs): if authenticated: return func(*args, **kwargs) else: raise Exception("未授权") return wrapper @authenticate def get_secret_data(): pass
Kami boleh melaksanakan fungsi caching melalui penghias untuk mengurangkan overhed pengiraan dan meningkatkan prestasi.
cache = {} def memoize(func): def wrapper(*args): if args in cache: return cache[args] else: result = func(*args) cache[args] = result return result return wrapper @memoize def fib(n): if n < 2: return n else: return fib(n-1) + fib(n-2)
4 Corak penghias biasa
Corak penghias ialah corak reka bentuk biasa, yang merangkumi elemen berikut:
Dalam Python, kami biasanya menggunakan fungsi untuk mensimulasikan kelas dan objek dalam corak penghias. Di bawah adalah contoh mudah.
class Component: def operation(self): pass class ConcreteComponent(Component): def operation(self): return "具体组件的操作" class Decorator(Component): def __init__(self, component): self._component = component def operation(self): return self._component.operation() class ConcreteDecoratorA(Decorator): def added_behavior(self): return "具体装饰器A的操作" def operation(self): return f"{self.added_behavior()},然后{self._component.operation()}" class ConcreteDecoratorB(Decorator): def added_behavior(self): return "具体装饰器B的操作" def operation(self): return f"{self.added_behavior()},然后{self._component.operation()}" component = ConcreteComponent() decoratorA = ConcreteDecoratorA(component) decoratorB = ConcreteDecoratorB(decoratorA) print(decoratorB.operation()) # 输出 具体装饰器B的操作,然后具体装饰器A的操作,然后具体组件的操作
Dalam contoh ini, Component
ialah kelas komponen abstrak, ConcreteComponent
ialah kelas komponen konkrit, Decorator
ialah kelas penghias abstrak dan ConcreteDecoratorA
dan ConcreteDecoratorB
ialah kelas penghias konkrit .
5 Ringkasan
Melalui penjelasan artikel ini, kita dapat melihat bahawa penghias dalam Python adalah ciri yang sangat berkuasa yang boleh membantu kita memperluaskan fungsi fungsi, mencapai penggunaan semula kod, Juga sebagai meningkatkan fleksibiliti dan kebolehbacaan kod. Aplikasi penghias yang munasabah boleh menjadikan program kami lebih ringkas, elegan dan cekap.
Atas ialah kandungan terperinci Memahami penghias dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!