名称空间,作用域,取值顺序
名称空间:当程序运行时,代码从上至下依次执行,将变量与值的关系存储在一个空间中,这个空间叫做名称空间,命名空间,全局名称空间。
局部名称空间:当程序遇到函数时,他会将函数名存在内存中,函数体莫不关心。
当函数执行时,内存会临时开辟一个空间,存放函数体里面的代码(变量,代码等),
函数外面访问不到临时空间的内容,随着函数的执行完毕,临时名称空间会释放掉,
向这个临时开辟的空间叫临时名名称空间,也叫局部名称空间。
python 中名称空间分三种:
内置名称空间。
全局名称空间。
局部名称空间。
作用域:
全局作用域:
内置名称空间。
全局名称空间。
局部作用域
局部名称空间。
加载顺序:
内置名称空间 ---> 全局名称空间(当程序执行时) ---> 局部名称空间(当函数调用时)
取值顺序:单向不可逆
局部名称空间(当函数调用时) -->全局名称空间(当程序执行时) -->内置名称空间
加载顺序:
内置名称空间 ---> 全局名称空间(当程序执行时) ---> 局部名称空间(当函数调用时)
取值顺序:单向不可逆
局部名称空间(当函数调用时) -->全局名称空间(当程序执行时) -->内置名称空间
内置函数 globals() locals()
globals():返回一个字典,字典里面的内容是全局作用域的内容。
locals():返回一个字典,当前位置的所有变量。
关键字global,nonlocal
global,在函数内部修改全局变量
name = 'zhangsan'
def func1():
global name
name = 'lisi'
print(name)
func1()
print(name)
nonlocal,在内层函数里面修改外层函数的变量
def func1():
count = 1
def inner():
nonlocal count
count = count + 3
print(count)
inner()
print(count)
func1()
函数名的应用
函数名被称为:第一类对象。具有以下特性:
函数名可以作为容器类数据的元素
函数名可以作为函数的参数
函数名可以作为函数的返回值
闭包
闭包:内层函数对外层函数非全局变量的引用,就叫做闭包。Python解释器遇到闭包,这个局部命名空间不会随着函数的结束而释放。
装饰器
装饰器的本质是闭包,作用是在不修改原函数代码,不影响原有函数的执行方式的情况下增加功能,即装饰其他函数。
def wrapper(f):
def inner(*args,**kwargs):
"""被装饰函数执行之前的操作"""
ret = f(*args,**kwargs)
"""被装饰函数执行之后的操作"""
return ret
return inner