作者W5566DerD1 (W5566得第一)
看板Python
标题[问题] 想询问closure的判读问题
时间Sat May 22 20:41:20 2021
第一个
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://webptt.com/cn.aspx?n=bbs/Python/M.1621687282.A.A1A.html
1F:推 aidansky0989: 从上而下依序执行,没什麽特别,不要想太复杂05/22 21:18
2F:→ zerof: local variable 优先, nonlocal keyword 可以研究一下 05/23 01:06
3F:推 mars90226: 关键字 variable shadowing,local变数盖掉外面变数05/23 02:03
谢谢你们。不过我不知道第一个函式,我对closure的判读顺序与逻辑正不正确
※ 编辑: W5566DerD1 (123.240.190.47 台湾), 05/23/2021 15:10:10