Python的作用域可以分为四种:
l L (Local) 局部作用域
l E (Enclosing) 闭包函数外的函数中
l G (Global) 全局作用域
l B (Built-in) 内建作用域
影响变量/函数作用范围的有:
l 函数:def 或 lambda
l 类:class
l 关键字:global noglobal
l 文件:*py
l 推导式:[],{},()等,仅限Py3.x中,Py2.x会出现变量泄露。
1、赋值在前,引用在后
1 2 3 4 5 6 7 8 |
|
2、引用在前,赋值在后(同一作用域内)
1 2 3 |
|
3、赋值在低层,引用在高层
1 2 3 4 5 6 |
|
关于改变作用域
变量的作用域,与其定义(或赋值)的位置有关,但不是绝对相关。因为我们可以在某种程度上去改变向上的作用范围。
l 关键字:global将 局部变量 变为全局变量
l 关键字:nonlocal可以在闭包函数中,引用并使用闭包外部函数的变量(非全局的噢)
global好理解,这里只讲下nonlocal。
先来看个例子
1 2 3 4 5 6 7 |
|
运行一下,会报错:
1 |
|
但是这样就OK
1 2 3 4 5 6 7 8 9 |
|
其实,你如果不使用 +=、-=等一类的操作,不加nonlocal也没有关系。这就展示了闭包的特性。
1 2 3 4 5 6 7 8 |
|
以上是关于python作用域内容整合集锦,大家可以了解下哦~另外,作用域在大家的项目实践里,是经常能遇到的事情,因此,掌握好作用域也至关重要,多看两遍以上内容,很容易就掌握住了。