[問題] decorator的用法

看板Python作者 (...)時間13年前 (2012/02/28 13:35), 編輯推噓3(3022)
留言25則, 3人參與, 最新討論串1/2 (看更多)
大家好,我想測試一下decorator的用法, 所以用以下兩個函數, def f1(value): return value + 1 @f1 #decorator def f2(): return 10 想做出f()的效果 def f3(): return 10 def f(): return f1(f3()) 可是卻出現error -- TypeError: unsupported operand type(s) for +: 'function' and 'int' 請問decorator的使用方式有什麼問題嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.151.106

02/28 14:15, , 1F
decorator應該是function to function
02/28 14:15, 1F

02/28 14:22, , 2F
def _f1(v):
02/28 14:22, 2F

02/28 14:22, , 3F
return v + 1
02/28 14:22, 3F

02/28 14:23, , 4F
def f1(f):
02/28 14:23, 4F

02/28 14:23, , 5F
def _f():
02/28 14:23, 5F

02/28 14:23, , 6F
return _f1(f())
02/28 14:23, 6F

02/28 14:23, , 7F
return _f
02/28 14:23, 7F

02/28 14:24, , 8F
大概像這樣
02/28 14:24, 8F

02/28 17:21, , 9F
我後來改成:
02/28 17:21, 9F

02/28 17:22, , 10F
def test(f):
02/28 17:22, 10F

02/28 17:22, , 11F
print "test"
02/28 17:22, 11F

02/28 17:22, , 12F
02/28 17:22, 12F

02/28 17:22, , 13F
def f():
02/28 17:22, 13F

02/28 17:22, , 14F
print "@"
02/28 17:22, 14F

02/28 17:22, , 15F
f()
02/28 17:22, 15F

02/28 17:23, , 16F
結果出現錯誤訊息:
02/28 17:23, 16F

02/28 17:23, , 17F
TypeError: 'NoneType' object is not callable
02/28 17:23, 17F

02/28 17:40, , 18F
@foo
02/28 17:40, 18F

02/28 17:40, , 19F
def bar():
02/28 17:40, 19F

02/28 17:40, , 20F
pass
02/28 17:40, 20F

02/28 17:43, , 21F
以上寫法等同於 bar=foo(bar)
02/28 17:43, 21F

02/28 17:44, , 22F
decorator 只是一種 syntatic sugar 沒什麼特別
02/28 17:44, 22F

02/28 17:47, , 23F
一般的用法是傳入一個 function 然後產生另一個 function
02/28 17:47, 23F

02/28 17:47, , 24F
像 mikapauli 舉的例子那樣
02/28 17:47, 24F

02/28 17:49, , 25F
打錯字 syntatic -> syntactic
02/28 17:49, 25F
文章代碼(AID): #1FJ6UgCA (Python)
討論串 (同標題文章)
文章代碼(AID): #1FJ6UgCA (Python)