[問題] 函式修飾子
各位版友好
以下是一個範例
def sidedish(number):
return {
1:lambda meal:print('1'),
2:lambda meal:print('2'),
3:lambda meal:print('3'),
4:lambda meal:print('4')
}.get(number,lambda meal:print('other'))
@sidedish(2)
@sidedish(3)
def friedchicken():
return 49.0
print(friedchicken.__class__)
我想要用sidedish修飾friedchicken
請問為什麼friedchicken__class__是NonType呢@@?
這使得我無法呼叫friedchicken()
我是改http://caterpillar.onlyfun.net/Gossip/Python/FunctionDecorator.html
裏面的範例
接著第二個範例是
score = int(input('the score?'))
level = score//10
{
##dictionary object
10:lambda:print('Perfect'),
9:lambda:print('A'),
8:lambda:print('B'),
7:lambda:print('C'),
6:lambda:print('D'),
}.get(level,lambda:print('E'))()
請問get後面加上一個()是因為回傳的是一個lambda
為了執行lambda後面的運算式才需要加嘛?
沒加的話反而什麼都沒print
因為我看第一個範例也是return一個字典物件的value
可是他get後面就沒加()
如果第一個範例的get後面有加()的話
直譯器會輸出:
in sidedish
}.get(number,lambda meal:print('other'))()
TypeError: <lambda>() takes exactly 1 positional argument (0 given)
再請教一個範例:
def sidedish1(meal):
return lambda:meal()+30
def sidedish2(meal):
return lambda:meal()+40
def friedchicken():
return 49.0
friedchicken = sidefish1((sidedish2(friedchicken)))
print(friedchicken()) #119.0
想請問的是
在sidedish2(friedchicken)之後會回傳friedchicken()+40(meal被代換成friedchicken)
所以回傳的是一個float
但是為什麼可以當作sidedish1的參數呢
sidedish1的參數應該要是一個function吧?
謝謝各位版友的指教
--
~宅男的四個徵兆~
∠□ ○ ! * \○/ ★ (○ ?
╦╦└□ " ○□═ □ □>
║║√√ ╦══╦ ∥ |\
一回家就上PTT 每天想正妹 以當好人為樂 忘記正妹虧欠自己
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.239.20.44
※ 編輯: Arim 來自: 36.239.20.44 (08/18 23:14)
→
08/19 01:39, , 1F
08/19 01:39, 1F
→
08/19 01:40, , 2F
08/19 01:40, 2F
→
08/19 01:53, , 3F
08/19 01:53, 3F
→
08/19 12:45, , 4F
08/19 12:45, 4F
Python 近期熱門文章
PTT數位生活區 即時熱門文章