我有一段代碼,如下所示:def range_print(n, *args): for i in range(n): func(i)@range_print(n=10)def func(i): print(i)我得到:TypeError Traceback (most recent call last)<ipython-input-4-b13e44263521> in <module> 2 for i in range(n): 3 func(i)----> 4 @range_print(n=10) 5 def func(i): 6 print(i)<ipython-input-4-b13e44263521> in range_print(n, *args) 1 def range_print(n, *args): 2 for i in range(n):----> 3 func(i) 4 @range_print(n=10) 5 def func(i):TypeError: 'NoneType' object is not callable后來我解決了這個問題,但我不知道有沒有更好的方法?我想使用裝飾器使我的代碼看起來更干凈。def range_print(n, *args): def inner(func): # <----Why do I need this def to load func? for i in range(n): func(i) return inner@range_print(n=10)def func(i): print(i)
1 回答

GCT1015
TA貢獻1827條經驗 獲得超4個贊
該函數將函數作為參數的原因是,當您向函數添加類似裝飾器時,這就是Python的機制的工作方式。inner
@range_print(n=10)
調用函數時,Python 會將函數本身及其參數傳遞給裝飾器。range_print
因此,在您的情況下,函數簽名中指定的參數實際上是一個函數。n
range_print
添加回答
舉報
0/150
提交
取消