Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah Yang Dilakukan `functools.wraps` dalam Penghias Python?

Apakah Yang Dilakukan `functools.wraps` dalam Penghias Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 04:33:17725semak imbas

What Does `functools.wraps` Do in Python Decorators?

Menyingkap Fungsi functools.wraps

Di dalam alam penghias Python, persoalan timbul: apakah tujuan functools.wraps ?

Pemahaman Penghias

Penghias membenarkan kami meningkatkan kefungsian fungsi sedia ada dengan membungkusnya dengan logik tersuai. Walau bagaimanapun, proses pembungkusan ini boleh mengakibatkan kehilangan metadata yang dikaitkan dengan fungsi asal, iaitu nama, dokumentasi dan senarai argumennya.

Memperkenalkan functools.wraps

Di sinilah fungsi functools.wraps. Ia adalah penghias yang menangani isu kehilangan metadata. Dengan menggunakan @wraps(func) pada fungsi penghias, kami mengarahkan penghias untuk mewarisi metadata fungsi asal.

Cara functools.wraps Berfungsi

  • Memelihara Nama Fungsi: Menghalang nama fungsi yang dihias daripada diganti dengan nama penghias.
  • Mengekalkan Rentetan Dokumen: Menyalin dokumentasi fungsi asal ke dalam fungsi yang dihias.
  • Kekalkan Argumen: Memastikan bahawa yang dihias fungsi mengekalkan tandatangan hujah yang sama seperti yang asal fungsi.

Contoh Penggunaan

Pertimbangkan contoh berikut:

def logged(func):
    @wraps(func)
    def with_logging(*args, **kwargs):
        print(func.__name__ + " was called")
        return func(*args, **kwargs)
    return with_logging

@logged
def f(x):
    """Computes a mathematical operation."""
    return x + x * x

Dengan menggunakan @wraps(func) pada penghias log , kami memastikan bahawa fungsi yang dibalut f mengekalkan nama asal, dokumentasi dan hujahnya senarai:

  • print(f.__name__) output 'f'
  • print(f.__doc__) mencetak 'Mengira operasi matematik.'

Kesimpulan

functools.wraps memainkan peranan penting dalam memelihara metadata fungsi yang dibalut dengan penghias, memastikan maklumat penting tidak hilang. Dengan menggunakan @wraps(func), kami boleh mencipta penghias yang fleksibel dan bermaklumat yang meningkatkan tingkah laku fungsi dengan berkesan tanpa menjejaskan ciri asalnya.

Atas ialah kandungan terperinci Apakah Yang Dilakukan `functools.wraps` dalam Penghias 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