关于闭包里面局部变量的问题
x=5def fun1():
def fun2():
x*=x
return x
return fun2()
fun1()
报错:local variable 'x' referenced before assignment说x是局部变量,但在函数之前定义的变量不应该是全局变量吗? 不是,x的作用域在函数体之外不属于全局变量,除非x是列表和字典等容器型变量 首先,fun2()函数是内嵌函数,
也就是只有在fun1被调用时才能调用fun2,
内嵌函数内的变量属于局部变量,也就是调用不了任何外部变量,只能调用fun2函数内存在的变量
而fun1是不属于内嵌函数的,可以直接调用外部变量,参考下面代码:
x = 5
def fun1():
s = x
def fun2():
nonlocal s
s *= s
return print(s)
return fun2()
fun1()
通过在函数fun1内设置一个名为s的变量并把外部x的变量赋值给s
然后在内嵌函数fun2中使用nonlocal函数声明变量s是全局变量,可以被内嵌函数调用
再来调用s进行计算
最后返回打印出s的值
【仅凭已知知识得出经验,还没学完,不是大佬,如有不对麻烦大佬指点{:10_258:} 】
【如果本帖对你有帮助且问题解决话楼猪别忘了设置最佳{:10_297:} 】 因为x是闭包内的局部变量,被屏蔽,所以在fun2里面依然是没有被定义的状态
容器类型则不会被屏蔽(列表,元组,字典)
或者在闭包中用nonlocal
页:
[1]