[问题] 想询问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