- 去上级查找-案例1
size = 19
func_list = [lambda: 1 + size, lambda: 2 + size, lambda: 3 + size]
# 此时函数体中没有size,会去上层或者全局变量里面查找,然后将 2+ size的值进行返回
ret = func_list[0]() # func_list[0] 内部不可见,只有加()才会执行 1
func_list[1]() # 2
func_list[2]() # 3
print(ret)
- 去上级查找案例2
size = 19
func_list = [lambda: 1 + size, lambda: 2 + size, lambda: 3 + size]
size = 20
ret = func_list[1]() # func_list[0] 内部不可见,只有加()才会执行 1
print(ret)
"""
1、在全局作用域,放了一个size = 19
2、在func_list 定义了一个函数,定义的函数存在在列表里面,此时函数未执行
3、在定义了一全局 作用域size ,此时size的值由:19 变成了20
4、这时在去调用:func_list[1]() 这个函数时,会去找size,会在内存中的上级作用域里找,而上级作用域执行到:func_list[1]()时,此时的size已经由:19变成了20,此时size用的值是20,此函数返回值为:22
"""
- 去上级查找案例3
# 去上级作用域查找案例3
size = 19
func_list = [lambda: 1 + size, lambda: 2 + size, lambda: 3 + size]
ret = func_list[1]() # 21
print(ret)
size = 20
ret = func_list[1]() # 22
print(ret)
#要看函数执行时上级作用域此时的值。当看到代码时是没有执行的,只有去执行时,他才会去查找他里面的这个值