python作用域

作者: alue | 来源:发表于2022-10-01 21:04 被阅读0次

下面一个简单的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

相关文章

网友评论

    本文标题:python作用域

    本文链接:https://www.haomeiwen.com/subject/btgdartx.html