美文网首页
python变量区域的一个坑

python变量区域的一个坑

作者: loinliao | 来源:发表于2018-09-23 16:59 被阅读0次
    1. python有两种变量,全局变量和局部变量。
    2. 全局变量的scope是整个module,局部变量是函数或者class。
      看一段代码:
    def test(a, b):
        def inner():
            print(a)
            print(b)
            b = 3
        inner()
    
    test(1, 2)
    

    会有一个错误:


    屏幕快照 2018-09-23 下午4.54.19.png

    可以看到b显示未定义的引用,但是变量a却没有错误。
    神奇的是,如果把b=3这一行注释掉,程序就不会报错了。

    原因解释

    stackovflow相似问题
    python 文档:

    When we use the assignment operator (=) inside a function, its default behaviour is to create a new local variable – unless a variable with the same name is already defined in the local scope.

    也就是说使用赋值运算符会定义一个新的本地变量。
    要造成上面那个现象还有一个原因甚至可以说是直接原因:
    python的内部函数当在函数体中定义了local variable时不会再引用外部的同名变量。

    相关文章

      网友评论

          本文标题:python变量区域的一个坑

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