20 函数去上级查找 案例

  1. 去上级查找-案例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)

  1. 去上级查找案例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
"""
  1. 去上级查找案例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)

#要看函数执行时上级作用域此时的值。当看到代码时是没有执行的,只有去执行时,他才会去查找他里面的这个值
posted @ 2024-09-25 22:46  jhchena  阅读(3)  评论(0编辑  收藏  举报