作者beatitude (...)
站內Python
標題[問題] decorator的用法
時間Tue Feb 28 13:35:35 2012
大家好,我想測試一下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
1F:推 mikapauli:decorator應該是function to function 02/28 14:15
2F:推 mikapauli:def _f1(v): 02/28 14:22
3F:→ mikapauli: return v + 1 02/28 14:22
4F:→ mikapauli:def f1(f): 02/28 14:23
5F:→ mikapauli: def _f(): 02/28 14:23
6F:→ mikapauli: return _f1(f()) 02/28 14:23
7F:→ mikapauli: return _f 02/28 14:23
8F:→ mikapauli:大概像這樣 02/28 14:24
9F:→ beatitude:我後來改成: 02/28 17:21
10F:→ beatitude:def test(f): 02/28 17:22
11F:→ beatitude: print "test" 02/28 17:22
13F:→ beatitude:def f(): 02/28 17:22
14F:→ beatitude: print "@" 02/28 17:22
15F:→ beatitude:f() 02/28 17:22
16F:→ beatitude:結果出現錯誤訊息: 02/28 17:23
17F:→ beatitude:TypeError: 'NoneType' object is not callable 02/28 17:23
18F:推 ypcat:@foo 02/28 17:40
19F:→ ypcat:def bar(): 02/28 17:40
20F:→ ypcat: pass 02/28 17:40
21F:→ ypcat:以上寫法等同於 bar=foo(bar) 02/28 17:43
22F:→ ypcat:decorator 只是一種 syntatic sugar 沒什麼特別 02/28 17:44
23F:→ ypcat:一般的用法是傳入一個 function 然後產生另一個 function 02/28 17:47
24F:→ ypcat:像 mikapauli 舉的例子那樣 02/28 17:47
25F:→ ypcat:打錯字 syntatic -> syntactic 02/28 17:49