python闭包和函数调用区别_对python闭包(内嵌函数)的理解

def count():

fs = []

for i in range(1,4):

def f():

return i*i

fs.append(f)

return fs

#第一种写法:

f1, f2, f3 = count()

print(f1(), f2(), f3())

"""#第二种写法:fn = count()print(fn[0](), fn[1](), fn[2]())"""

#【详解】刚开始可能以为结果是1,4,9 但是结果却是9,9,9

"""

1.运行f1,f2,f3 = count() ---> 计算机会执行count函数,先是创建fs这个列表,然后进入for循环

当 i=1 时候:创建一个f函数的框架,但f内部根本不会执行任何的东西,然后返回存储f函数的地址给fs[0]

当 i=2 时候:同上...... 然后返回存储f函数的地址给fs[1]

当 i=3 时候:同上...... 然后返回存储f函数的地址给fs[2]

最后返回fs这个列表

2.运行print()语句时候:先执行f1对应的这个函数,也就是f(),【这时候早在第一步for循环时候i已经成为3了,所以返回的 i*i 是用的i=3】

之后的f2, f3的解释也是和f1一样的

3.【实质】闭包(内嵌):

a. 在执行外部函数时,是不会执行内部函数的任何东西的,只有在调用内部函数时才会真正的执行(实质其实是基础知识,函数分为创建和执行两个部分,执行外部函数当然就是创建内部函数的过程,执行这个得再一步实施)

b. 函数的局部变量只能在函数内使用,出了函数就不行了,但是内部嵌套的函数还是可以继续使用的,因为嵌套的函数还是属于这个函数的内部的,不过只能是只读的状态,不能修改(你可以这样理解,但实际可能并不是这样:外部函数执行完毕后,它就会退出内存,存到硬盘里,内存是可以修改的,但是硬盘里只能读,不能修改)

4.【用处】我们都知道函数内创建的变量都是局部的只能在函数内使用,出了函数就不能使用了,但是有些情况是真的想用函数内创建的变量时怎么办?

难道不能用吗? 所以就利用了闭包(嵌套函数)这个东西,因为只能在函数内使用这个变量嘛,所以就在函数内专门创建一个函数来使用这个局部变量

"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值