之前小编在文中提到了范围,有小伙伴要求小编详细解释一下这方面的内容,所以小编不负众望,收集了很多内容。我希望为你做一个非常深入和容易理解的。下面小编就着重介绍这部分内容,为大家整理以下步骤。
关于
作用域
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、
赋值在前,引用在后
# ------同作用域内------
name = "MING"
print(name)
# ------不同作用域内------
name = "MING"
def main():
print(name)
2、
引用在前,赋值在后(同一作用域内)
print(name)
name = "MING"
# UnboundLocalError: local variable 'name' referenced before assignment
3、
赋值在低层,引用在高层
# L -> E -> G -> B
# 从左到右,由低层到高层
def main():
name = "MING"
print(name)
# NameError: name 'name' is not defined
关于
改变作用域
变量的范围与其定义(或分配)的位置有关,但不是绝对的。因为我们可以在一定程度上改变向上的范围。
l
关键字:
global将 局部变量 变为全局变量
l
关键字:
nonlocal可以在闭包函数中,引用并使用闭包外部函数的变量(非全局的噢)
global好理解,这里只讲下nonlocal。
先来看个例子
def deco():
age = 10
def wrapper():
age += 1
return wrapper
deco()()
运行一下,会报错:
# UnboundLocalError: local variable 'age' referenced before assignment
但是这样就
OK
def deco():
age = 10
def wrapper():
nonlocal age
age += 1
return wrapper
deco()()
# 输出:11
其实,你如果不使用
+=、-=等一类的操作,不加nonlocal也没有关系。这就展示了闭包的特性。
def deco():
age = 10
def wrapper():
print(age)
return wrapper
deco()()
# 输出:10
以上是关于
python作用域内容整合集锦,大家可以了解下哦~另外,作用域在大家的项目实践里,是经常能遇到的事情,因此,掌握好作用域也至关重要,多看两遍以上内容,很容易就掌握住了。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 火炬支持python吗?12/02
- ♥ 这四个python函数你知道吗?01/03
- ♥ Python 数值类型(整数、浮点数和复数)及其用法10/20
- ♥ python中字符串转数字的几种方法08/14
- ♥ Python sklearn 中如何使用算法?12/21
- ♥ Python 视图模块(变量、函数、类)方法12/01
内容反馈