零基础python课程第020函数的闭包的问题?
代码:def Fun1():
x =5
def Fun2():
x *=x
return x
return Fun2()
#Fun1()#会报错,因为Fun2只能调用Fun1中的x,但是不能对其进行修改
def Fun11():
x =#列表不是栈,可以
def Fun22():
x *=x
return x
return Fun22()
Fun11()
结果:
想问一下第一部分的Fun1\2会报错是因为,Fun2 是 Fun1 的内部函数,只能调用x不能修改x(我的理解但是不知道对不对)
那为什么第二部分的Fun11\22 Fun22就可以修改Fun11的X[]呢?
视频里提及了 容器 ,是因为列表比较特殊吗?具体特殊表现在什么地方呀 列表是一个全局变量,本质上python中的列表是一个栈,不同于整型变量,所以可以进行引用和修改
想问一下第一部分的Fun1\2会报错是因为,Fun2 是 Fun1 的内部函数,只能调用x不能修改x(我的理解但是不知道对不对)?
嗯,不准确,严格来说是因为 Fun2 函数对 x 参数重新赋值,触发屏蔽机制,屏蔽外部的全局变量,导致 你 x *= x 的时候
右边的 x 因为触发屏蔽机制,导致 x 在未定义之前提取调用,导致报错
那为什么第二部分的Fun11\22 Fun22就可以修改Fun11的X[]呢?
容器类型的值是可以对容器内的元素进行改变的,而如果你对容器本身进行赋值就会导致和第一个代码一样的报错
视频里提及了 容器 ,是因为列表比较特殊吗?具体特殊表现在什么地方呀
容器类型简单来理解就是可以装入元素的东西,比如 列表,字典,元组都是容器类型的值
页:
[1]