看板 Python 關於我們 聯絡資訊
先說清楚decorator的作用 @f def g(...): ... 上面的code和下面的等價 def g(...): ... g = f(g) ※ 引述《beatitude (...)》之銘言: : : def f1(value): : return value + 1 : : @f1 #decorator : def f2(): : return 10 因此上面等價於 f2 = f1(f2) 即 f2 = f2 + 1 所以會有error : TypeError: unsupported operand type(s) for +: 'function' and 'int' : 想做出f()的效果 : : def f3(): : return 10 : : def f(): : return f1(f3()) : : 推 mikapauli:def _f1(v): 02/28 14:22 : → mikapauli: return v + 1 02/28 14:22 : → mikapauli:def f1(f): 02/28 14:23 : → mikapauli: def _f(): 02/28 14:23 : → mikapauli: return _f1(f()) 02/28 14:23 : → mikapauli: return _f 02/28 14:23 若f1如上之定義 @f1 def f2(): return 10 則上面的code等價於 def f2(): return 10 f2 = f1(f2) 即f1定義裡的_f (_f1與f2的合成函數) : → beatitude:def test(f): 02/28 17:22 : → beatitude: print "test" 02/28 17:22 : → beatitude:@test #decorator 02/28 17:22 : → beatitude:def f(): 02/28 17:22 : → beatitude: print "@" 02/28 17:22 : → beatitude:f() 02/28 17:22 上面的code等價於 def test(f) print "test" return None def f(): print "@" return None f = test(f) f() 即 print "test" None() 所以會有下面的error : → beatitude:TypeError: 'NoneType' object is not callable 02/28 17:23 -- 「死ぬのっていや? 殺されたくない?」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.236.23
beatitude:感謝, 我了解了 thx :) 02/28 19:55