python变量区域的一个坑

  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时不会再引用外部的同名变量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容