Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah `functools.wraps` Mengekalkan Metadata Fungsi dalam Penghias Python?
Menyingkap Misteri functools.wraps: Mengekalkan Metadata Fungsi
Penghias memainkan peranan penting dalam memperluaskan fungsi fungsi Python. Walau bagaimanapun, mereka sering menyebabkan kos kehilangan metadata fungsi penting seperti nama, docstring dan senarai hujah. Nasib baik, functools.wraps muncul sebagai penyelamat, mengekalkan maklumat yang tidak ternilai ini.
Apabila menggunakan penghias, fungsi asal digantikan dengan fungsi pembalut, menyebabkan butiran utama tertentu dikaburkan. Sebagai contoh, pertimbangkan contoh berikut:
def logged(func): def with_logging(*args, **kwargs): print(func.__name__ + " was called") return func(*args, **kwargs) return with_logging @logged def f(x): """does some math""" return x + x * x
Jika anda melaksanakan cetakan(f.__name__), ia akan menghasilkan "with_logging," dan f.__doc__ akan mengembalikan rentetan kosong. Akibat ini timbul kerana fungsi pembalut with_logging telah menggantikan f.
functools.wraps menangani isu ini dengan membalut fungsi penghias dan memastikan metadata fungsi yang dihias kekal utuh. Dengan menggunakan @wraps(func) pada fungsi dalaman, seperti yang dilihat di bawah, kami memulihkan tingkah laku yang diingini:
from functools import wraps 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): """does some math""" return x + x * x print(f.__name__) # prints 'f' print(f.__doc__) # prints 'does some math'
Dalam contoh yang disemak ini, f.__name__ memaparkan "f," dan f.__doc__ dengan betul mencerminkan docstring fungsi asal. Pemeliharaan metadata adalah penting untuk mengekalkan identiti fungsi, dokumentasi dan keupayaan introspeksi.
Oleh itu, ingat bahawa functools.wraps ialah alat penting dalam kit alat penghias, melindungi daripada kehilangan maklumat dan memastikan fungsi yang dihias anda mengekalkannya atribut yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimanakah `functools.wraps` Mengekalkan Metadata Fungsi dalam Penghias Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!