Memahami penghias dalam Python

WBOY
Lepaskan: 2023-06-10 12:31:37
asal
2664 orang telah melayarinya

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

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:

  1. Pengelogan

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
Salin selepas log masuk
  1. Pengesahan dan Kebenaran

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

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

4 Corak penghias biasa

Corak penghias ialah corak reka bentuk biasa, yang merangkumi elemen berikut:

  1. Komponen abstrak Kelas mentakrifkan antara muka bagi objek yang dihias.
  2. Kelas komponen konkrit yang melaksanakan antara muka yang ditakrifkan oleh kelas komponen abstrak.
  3. Kelas penghias abstrak yang mentakrifkan antara muka objek penghias.
  4. Kelas penghias konkrit yang melaksanakan antara muka yang ditakrifkan oleh kelas penghias abstrak.

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的操作,然后具体组件的操作
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
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