[問題] 想詢問closure的判讀問題

作者: W5566DerD1 (W5566得第一)   2021-05-22 20:41:20
第一個
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了嗎
如果問題太低端,請鞭小力點
自學看的書跟上網查的我盡量學了,可是有問題我不知道能問誰...
作者: aidansky0989 (alta)   2021-05-22 21:18:00
從上而下依序執行,沒什麼特別,不要想太複雜
作者: zerof (貓橘毛發呆雕像)   2021-05-23 01:06:00
local variable 優先, nonlocal keyword 可以研究一下
作者: mars90226 (火星人)   2021-05-23 02:03:00
關鍵字 variable shadowing,local變數蓋掉外面變數

Links booklink

Contact Us: admin [ a t ] ucptt.com