关于闭包的问题 求解惑
下面这个是异常处理的课后题。def my_fun1():
x = 5
def my_fun2():
x *= x
return x
return my_fun2()
my_fun1()
确实如视频里讲的, 内部函数不能直接调用外部函数, 要重新定义函数本身, 或者要加nonlocal
那么问题来了。
def my_fun1():
list1 = []
def my_fun2():
list1.append(2) #为什么list可以直接调用外面定义的list
return list1
return my_fun2()
my_fun1()
为什么我在外部函数定义了list1 可以直接拿到内部函数里来用
{:5_107:}
本帖最后由 Twilight6 于 2022-5-12 09:14 编辑
函数中的内嵌函数,相对与外部函数属于局部
而外部函数相对于这个内嵌函数属于全局,所以 my_fun2 中 可以用 my_fun1 的变量
有关闭包的例子可以看看这篇帖子:
[已解决] 20讲闭包例子
https://fishc.com.cn/thread-175884-1-1.html
访问是可以访问的,只是不能赋值,append 是原地操作,
并没有重新赋值 list1在外面my_fun1函数里,my_fun2属于my_fun1,所以里面的函数可以调用外部函数声明的列表,你学了c就知道了,列表其实就是第一个元素的地址,在外部函数结束之前不会被销毁所以可以调用
页:
[1]