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