|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码:
def Fun1():
x =5
def Fun2():
x *=x
return x
return Fun2()
#Fun1()#会报错,因为Fun2只能调用Fun1中的x,但是不能对其进行修改
def Fun11():
x =[5]#列表不是栈,可以
def Fun22():
x[0] *=x[0]
return x
return Fun22()
Fun11()
结果:[25]
想问一下第一部分的Fun1\2会报错是因为,Fun2 是 Fun1 的内部函数,只能调用x不能修改x (我的理解但是不知道对不对)
那为什么第二部分的Fun11\22 Fun22就可以修改Fun11的X[]呢?
视频里提及了 容器 ,是因为列表比较特殊吗?具体特殊表现在什么地方呀
想问一下第一部分的Fun1\2会报错是因为,Fun2 是 Fun1 的内部函数,只能调用x不能修改x (我的理解但是不知道对不对)?
嗯,不准确,严格来说是因为 Fun2 函数对 x 参数重新赋值,触发屏蔽机制,屏蔽外部的全局变量,导致 你 x *= x 的时候
右边的 x 因为触发屏蔽机制,导致 x 在未定义之前提取调用,导致报错
那为什么第二部分的Fun11\22 Fun22就可以修改Fun11的X[]呢?
容器类型的值是可以对容器内的元素进行改变的,而如果你对容器本身进行赋值就会导致和第一个代码一样的报错
视频里提及了 容器 ,是因为列表比较特殊吗?具体特殊表现在什么地方呀
容器类型简单来理解就是可以装入元素的东西,比如 列表,字典,元组都是容器类型的值
|
|