亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用裝飾器引入功能和參數?

如何使用裝飾器引入功能和參數?

繁星點點滴滴 2022-09-06 15:40:38
我有一段代碼,如下所示: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

因此,在您的情況下,函數簽名中指定的參數實際上是一個函數。nrange_print


查看完整回答
反對 回復 2022-09-06
  • 1 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號