Junior — Middle
Роли функсияи functools.wraps дар сохтани декораторҳо дар Python чист?
sobes.tech AI
Ҷавоб аз AI
Функсияи functools.wraps дар вақти сохтани декораторҳо дар Python барои нигоҳ доштани метадатаи функсияи аслӣ, ки декоратор мепӯшад, истифода мешавад. Бе истифодаи wraps, номи функсия, ҳуҷҷатгузорӣ (doc) ва дигар хосиятҳо бо хосиятҳои функсияи дохилии декоратор иваз мешаванд, ки ин корро барои хатоҷӯӣ ва ҳуҷҷатгузорӣ душвор месозад.
Маслиҳати истифода:
import functools
def my_decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print("Пеш аз даъвати функсия")
result = func(*args, **kwargs)
print("Пас аз даъвати функсия")
return result
return wrapper
@my_decorator
def greet(name):
"Функсияи салом"
print(f"Салом, {name}!")
print(greet.__name__) # 'greet'-ро мебарорад, на 'wrapper'
print(greet.__doc__) # 'Функсияи салом'-ро мебарорад
Инчунин, functools.wraps кӯмак мекунад, ки маълумоти функсияи декоратсияшударо нигоҳ дорад, ки ин ба хондан ва нигоҳдории коди беҳтар кӯмак мекунад.