命名空间和作用域
命名空间一共分为三种:
全局命名空间
局部命名空间
内置命名空间
三种命名空间之间的加载与取值顺序:
加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)
作用域
全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效
局部作用域:局部名称空间,只能在局部范围内生效
globals和locals方法
locals() 函数会以字典类型返回当前位置的全部局部变量。(只读)
globals() 函数会以字典类型返回当前位置的全部全局变量。(更多在局部修改全局变量)
nonlocal关键字
# 1.外部必须有这个变量
# 2.在内部函数声明nonlocal变量之前不能再出现同名变量
# 3.内部修改这个变量如果想在外部有这个变量的第一层函数中生效
闭包函数
内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数
#函数内部定义的函数称为内部函数
def func(): name = 'eva' def inner(): print(name) return inner f = func() f()