Python中函数作为元组中的一个元素,并不立马调用,而是在之后调用
l1 = []
for i in range(3):
# f1 实现了 x + i
def f1(x):
print(x + i)
l1.append(f1)
for ll1 in l1:
ll1(2) # 此处调用
这大概涉及到python的惰性求值
我想的是:
- x + 0 = 2
- x + 1 = 3
- x + 2 = 4
但结果是
- x + 2 = 4
- x + 2 = 4
- x + 2 = 4
因为:
python的函数只有在执行时,才会去找函数体里的变量的值。而此时,i = 2
所以应写成
l2 = []
for i in range(3):
def f1(x, y=i):
print(x + y)
l2.append(f1)
for ll2 in l2:
ll2(2)