def f1(): global a1 a1=3 def f2(): print a1 a1=4 f1() f2()
这几乎与书上例子同出一辙。将报(变量在使用之前未定义)的错误。若去掉a1=4一句,则程序运行正常。若去掉print a1一句,程序运行也正常。但两句共存,则报错。
原因即在于 print a1 自动适用LEGB法则,将a1作为全局变量解释,但其之后的a1=4却根据原则,重新定义了一个a1的局部变量。显然,在f2的同一作用域内,a1不可能既为全局又为局部,所以a1将作为局部变量来定义。那么位于a1=4之前的print a1一句,将访问的是一个还不存在的局部变量a1,当然会出错。
而根据本人的原意,是要打印和修改全局变量a1的值,所以解决方法是在print a1前面加上一句:global a1,将a1明确声明为全局变量。
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/437.html