推 beatitude:感謝, 我了解了 thx :) 02/28 19:55
※ 引述《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
先說清楚decorator的作用
@f
def g(...):
...
上面的code和下面的等價
def g(...):
...
g = f(g)