簡體   English   中英

Python裝飾器跳過裝飾函數的代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM