递归
打印的444 函数内存地址不同 但是不这么的话 两个内存地址 不同 函数体的内存地址相同 第二种不同 因为执行完了 for 所以 i =2
l = [] for i in range(3): def fun(x ): #新建一个 内存地址存放 print(x*i) # z = x * i # print(z) # print(id(i)) print(x*i) print(id(x*i)) # print(id(z)) # print(id(fun),id(print(x*i))) # print(i) # print(id(fun),id(print())) # print(i) # print(id(y*x)) # print(fun) l.append(fun) for fun in l: fun(2) # print(fun)
# 第一种 第二种 i y 已经有值 了 l 中的func 只有 x 没有值 第二种 因为每一次函数定义 把值给了它 0 1 2 打印的024
l = [] for i in range(3): # def fun(x, y=i ): def fun(x): # print(x*y) print(x*i) l.append(fun) # l = [fun,fun,fun] x*i I= 2 # fun(2) #x*y for 循环先执行 说明已经把值存进去了 #l = [fun,fun,fun] # y = 1 y =2 y =3 # for fun in l: # fun(2) print(l) #[<function fun at 0x000000000254B268>, <function fun at 0x000000000254B2F0>, <function fun at 0x000000000254B378>] print(l[0])# print(l[0](4)) l[0](2) # [<function fun at 0x000000000259B268>, <function fun at 0x000000000259B2F0>, <function fun at 0x000000000259B378>]第二种也是