嵌套调用:在函数内部中调用函数python
嵌套定义:在函数内部中定义函数函数
存放变量名称的空间,分为内置名称空间、全局名称空间、局部名称空间code
内置名称空间:python中,提早定义的名字,存在内置名称空间中。例如:关键字、内置方法对象
全局名称空间:存放于文件级别的名字,就是全局名称空间生命周期
if / while / for 内部定义的名字,在执行以后都存放于全局名称空间内存
# if 的示例: var = 4 if var > 5: var = "var 大于5" else: var = "var 小于等于5" print(var) # 打印结果:var 小于等于5 # while 的示例: num = 0 while num <= 3: num += 1 print(num) # 打印结果:4 # for 的示例 for i in range(2): pass print(i) # 打印结果:1
局部名称空间:函数内部定义的全部名字都是存放于当前函数的内置名称空间作用域
若是想访问一个变量值,必须先访问对应的名称空间,获取到该变量的名称以及名称和值内存地址之间的关系。class
局部名称:局部 → 全局 → 内置函数容器
全局名称:全局 → 内置变量
内置再找不到就会报错
函数内部使用的名字,在定义阶段已经规定死了,与调用位置无关
局部做用域:局部能够调用的名字存在于局部做用域。局部名称空间属于此处
global:将局部名称空间的变量声明成全局变量
注意:global须要在函数内部声明,若在函数外声明,则函数依然没法操做
# 这种状况不能修改x1的值 x1 = 1 def func1(): x1 = 2 func1() print(x1) # 打印结果:1 # 使用global 后,能够修改x2的值 x2 = 1 def func2(): global x2 # 先声明成全局变量 x2 = 2 func2() print(x2) # 打印结果:2 # global 若在函数外声明,没法操做变量 global x3 x3 = 1 def func2(): x3 = 2 func3() print(x3) # 打印结果:1
nonlocal:在局部名称空间声明局部变量。
nonlocal 声明后的变量会从当前函数的外层函数开始一层层去查找该变量。如果一直到最外层函数都找不到,则会抛出异常。
def f3(): x = 4 def f1(): y = 2 def f2(): nonlocal x x = 3 f2() # 调用f2(),修改f1做用域中名字x的值 print(x) # 在f1做用域查看x。打印结果:3 f1() print(x) # 打印结果:3 f3()
def f3(): x = 4 def f1(): x = 2 def f2(): nonlocal x x = 3 f2() # 调用f2(),修改f1做用域中名字x的值 print(x) # 在f1做用域查看x。打印结果:3 f1() print(x) # 打印结果:4 f3()