看板 Python 關於我們 聯絡資訊
第一個 1 def target_value(x): 2 def compare(y): 3 return ' > target ' if y > x else ' < target ' 4 return compare 5 func = target_value(10) 6 print(func(2)) 7 印出 < target 還不太懂判讀順序 我的解讀是這樣 將10放入x之後,2、3行沒執行,直接跳到第4行 此時func等於變數compare finc(2)等於compare(2),把2放入y裡面直接判斷 得到x=10,y=2 所以印出 < target 第二個 1 def outer(a): 2 b = a 3 def inner(): 4 c = 3 5 def inner_inner(b): 6 r = b + c 7 return b + c 8 return inner_inner 9 return inner 10 foo = outer(10) 11 bar = foo() 12 print(bar(1)) 13 印出4 這邊我就搞不太懂了 outer(10)帶入a,a等於b,中間第3~8行沒動作,跳到第9行return給變數inner 第10行,foo等於inner,所以第11行bar等於呼叫inner() c = 3,第5~7行沒動作,到第9行return inner_inner 第12行印出bar(1)就等於呼叫inner_inner(1)的意思 b = 1,所以印出4 所以,我說那個10勒? 前面不是a=b=10了嗎 如果問題太低端,請鞭小力點 自學看的書跟上網查的我盡量學了,可是有問題我不知道能問誰... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.240.180.11 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1621687282.A.A1A.html
aidansky0989: 從上而下依序執行,沒什麼特別,不要想太複雜05/22 21:18
zerof: local variable 優先, nonlocal keyword 可以研究一下 05/23 01:06
mars90226: 關鍵字 variable shadowing,local變數蓋掉外面變數05/23 02:03
謝謝你們。不過我不知道第一個函式,我對closure的判讀順序與邏輯正不正確 ※ 編輯: W5566DerD1 (123.240.190.47 臺灣), 05/23/2021 15:10:10