Re: [问题] python闭包的语法(修改后囉)

楼主: sating00 (sating00)   2019-07-30 22:29:07
简单的回复一下:
```
def somethings(a,b):
```
在小弟跟同学解释类似的东西的时候,都会把他称之为函数
要用更简单的说就是: sin(pi)=0 cos(pi)=-1 类似的意思,
括号内丢个东西进去(或是也可以不用丢),经过他其中的程式码,
将你丢进去的东西转换成别的我想要的东西(有点绕口)。
现在来看你的程式码吧!
code:
====
def outer():
b = 10
def inner(x):
return 5 * x + b
return inner
b = 2
f = outer()
print(f(b))
====
这边我们要理解的是:程式虽然是由上开始逐行执行,但是def只是一个函数,
只有在我们需要他的时候才会呼叫他,
还有不同函数的代号是分开理解的,所以outer()的b跟,
b=2的b是不一样的b。
所以从b=2开始执行,
1. b = 2
2. 让outer()这个函数也可以用f来呼叫他
3. 输出f(b),也就是执行outer()
4. outer()里面的b=10,中间的inner(x)还没呼叫到所以不执行
5. return inner 先呼叫inner
6. inner(x)需要的东西在这边会称为x,那他原本是什么呢?就是我们
一开始放进去的b(也就是2)
7. return 5 * x + b
\_就是2 \_就是10,因为在outer里面的b都被我们定义为10
8. 回到5. return inner 回传inner给我们的值
9. print(f(b)) 输出:20
end_
要理解为什么7. 的x 是二而不是10可以看看我修改后的范例:
https://imgur.com/685sX38
大guy寺john
作者: stucode   2019-07-30 23:23:00
推你热心,不过解释得不太对。2. f = outer()不是让 outer() 可以用 f 呼叫,而是当场呼叫 outer()并把它的传回值(也就是 inner 这个 function)assign 给 f。3. print(f(b))呼叫 f(b) 等于呼叫 inner(b),不是呼叫 outer()。所以下面 4. 5. 8. 的流程完全是错的。
楼主: sating00 (sating00)   2019-07-31 14:23:00
抱歉,因为也还在学习,所以只能尽力的解释,感谢大佬的指正。文章就不另修改了,请原提问者看留言解释即可。

Links booklink

Contact Us: admin [ a t ] ucptt.com