python名称空间和作用域
2019-08-29 本文已影响0人
魔曦帝天
https://www.jianshu.com/p/555598495cc6
a = 1 #1
a = 2 #2
b = a #3
del a #4
语句 1,a 引用了 1 这个对象或者将 a 绑定给了 1
语句 2, 会删除掉a在1上的标签,触发python的垃圾回收机制,
语句 3 会将 b 也绑定到2这个对象上。
global 作用是将函数内对 a 的操作影响扩展到全局
Namespace
命名空间的定义:变量到对象的映射集合。一般都是通过字典来实现的。主要可以分为三类:
内置命名空间
函数的本地命名空间
模块的全局命名空间
比如模块A和B都有c变量,那么通过A.c和B.c来使用是不冲突的。这三种命名空间也有着自己的生存周期,除了第二个函数的本地命名空间生存周期只在函数的调用开始到结束,其他两个的生存周期都是可以看做持续到解释器退出的。
作用域
a = 1
def setvalue():
a = 100
setvalue()
print(a)
简单的加一句声明之后
a = 1
def setvalue():
global a
a = 100
setvalue()
print(a)
在第一个例子中,函数中的 a 是局部变量,作用域只在函数内,所以不影响函数外的命名空间。第二个例子中,使用了 global 关键字,作用是将函数内对 a 的操作影响扩展到全局,所以函数外的结果收到了影响。