def func1(): local_var = None def func(args): print args,print "local_var:",local_var local_var = "local" func("first") func("second")func1()
我希望输出为:
first local_var: Nonesecond local_var: local
但是,我的实际输出是:
first local_var:Traceback (most recent call last): file "test.py",line 13,in func1() file "test.py",line 10,in func1 func("first") file "test.py",line 6,in func print "local_var:",local_varUnboundLocalError: local variable 'local_var' referenced before assignment
我对python范围规则的理解要求它应该按预期工作.我有其他代码,这可以按预期工作,但减少一个非工作代码片段到它上面的小部分情况也不起作用.所以我很难过.
解决方法 在func中对local_var的赋值使其成为func的本地 – 所以print语句在它被赋值之前引用了“非常非常本地”的变量,正如异常所说的那样.正如jtb所说,在Python 3中你可以使用非本地解决这个问题,但是从代码中可以清楚地看到,你在Python 2中使用print语句.Python 2中的传统解决方案是确保赋值不是一个简单名称,因此不会使变量更加局部,例如:def func1(): local_var = [None] def func(args): print args,local_var[0] local_var[0] = "local" func("first") func("second")func1()
索引的赋值不是一个简单名称,因此不影响局部性,并且从Python 2.2开始,嵌套内部函数引用外部包含函数中的本地变量是完全可以接受的,这是所有这个版本所做的(分配给裸名是一个与引用变量不同的问题).
总结以上是内存溢出为你收集整理的Python范围问题全部内容,希望文章能够帮你解决Python范围问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)