下面一个简单的python问题,估计很多人都会弄错。
b = 6
def f(a):
print(a)
print(b)
b = 9
如果此时运行 f(3), 请问会输出什么?
答案是:
3
Traceback (most recent call last):
File "D:\Python37\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "<input>", line 4, in f
UnboundLocalError: local variable 'b' referenced before assignment
Python在编译函数f时,发现用户有为 b
赋值的行为,因此判定 b
为局部变量,不会去外面找那个等于6的b。但执行到 print(b)
时,发现 b
没有绑定值,因此抛出 UnboundLocalError
.
这个行为跟JavaScript的行为不同,会给熟悉js的程序员带来困惑。
如果想让Python编译器将b判定为全局变量,需要使用关键字 global 来声明b。
b = 6
def f(a):
global b # 这样编译器就不会把b当做局部变量了
print(a)
print(b)
b = 9
网友评论