[英]Python decorator skips the code of the decorated function
此代碼跳過number
函數中的代碼:
def some_decorator(x):
def wrapper(x):
return x+1
return wrapper
@some_decorator
def number(x):
x = x + 100
return x
輸出:
>>> number(3)
4
我正在嘗試將number(3)
的輸出設為104,代碼有什么問題?
裝飾器將函數作為參數傳遞給裝飾器。 如果要執行該函數,則是您的工作:
def some_decorator(fn):
def wrapper(x):
return fn(x) + 1 # call the function and add 1
return wrapper
@some_decorator
def n(x):
x = x + 100
return x
n(3) # 104
附帶說明一下,通常可以使用functools.wraps
使包裝的函數按預期運行:
from functools import wraps
def some_decorator(fn):
@wraps(fn)
def wrapper(x):
return fn(x) + 1
return wrapper
@some_decorator
def n(x):
x = x + 100
return x
print(n.__name__) # now prints `n` instead of `wrapper`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.