Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menggunakan dan Penghias Rantai dengan Berkesan dalam Python?

Bagaimana untuk Menggunakan dan Penghias Rantai dengan Berkesan dalam Python?

Linda Hamilton
Linda Hamiltonasal
2025-01-01 08:10:10524semak imbas

How to Effectively Use and Chain Decorators in Python?

Cara Membuat dan Menghias Rantai dalam Python

Mencipta Penghias

Tulis fungsi penghias yang mengambil fungsi lain, dipanggil fungsi "berbalut", sebagai hujah:

def my_decorator(func):

    # Code to execute before calling the wrapped function
    print("Before the function runs")

    # Call the wrapped function and store its return value
    result = func()

    # Code to execute after calling the wrapped function
    print("After the function runs")

    # Return the result of the wrapped function
    return result

# Example of a decorator in action
@my_decorator
def say_hello():
    print("Hello, world!")

Penghias Rantai

Gunakan operator @ untuk menggunakan berbilang penghias pada fungsi yang sama:

@my_decorator
@another_decorator
def chained_function():
    print("This function is doubly decorated")

Penghias dengan Hujah

Benarkan penghias menerima hujah:

def decorator_with_arg(arg1, arg2):

    def decorator(func):

        # Use the decorator arguments to modify the wrapped function's behavior
        func.arg1 = arg1
        func.arg2 = arg2

        return func

# Example of a decorator with arguments
@decorator_with_arg("foo", "bar")
def my_function():
    print("Args:", my_function.arg1, my_function.arg2)

Penghias Kaedah Kelas

Gunakan penghias untuk kaedah dalam kelas:

class MyClass:

    @classmethod
    def my_class_method(cls):
        print("This is a class method")

Amalan: Menghias seorang Penghias

Buat penghias yang membuat penghias lain terima hujah:

def decorator_with_args(decorator_to_enhance):

    def decorator_maker(*args, **kwargs):

        def decorator_wrapper(func):

            # Wrap the original decorator and pass the arguments
            return decorator_to_enhance(func, *args, **kwargs)

        return decorator_wrapper


# Example of a decorated decorator
@decorator_with_args
def decorated_decorator(func, *args, **kwargs):
    print("Args:", args, kwargs)
    return func


@decorated_decorator(10, 20, name="John")
def my_function():
    print("Decorated function")

Amalan Terbaik

  • Elakkan memperlahankan kod disebabkan overhed penghias.
  • Gunakan functools.wraps() untuk mengekalkan maklumat fungsi asal.
  • Penghias adalah kekal setelah digunakan pada fungsi.
  • Pertimbangkan untuk menggunakannya untuk nyahpepijat atau melanjutkan fungsi sedia ada daripada perpustakaan luaran.

Contoh Penggunaan

Gunakan penghias untuk tugasan seperti :

  • Mengukur masa pelaksanaan fungsi (@penanda aras)
  • Panggilan fungsi pengelogan (@pembalogan)
  • Mengira panggilan fungsi (@pembilang)
  • Caching keputusan fungsi

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan dan Penghias Rantai dengan Berkesan dalam Python?. 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