我们从一个测试开始。下面这个函数的功能是什么?
def foo(lst):
a = 0
for i in lst:
a += i
b = 1
for t in lst:
b *= i
return a, b
如果你觉得它的功能是“计算lst中所有元素的和与积”,不要沮丧。通常很难发现这里的错误。如果在大堆真实的代码中发现了这个错误就非常厉害了。——当你不知道这是一个测试时,很难发现这个错误。
这里的错误是在第二个循环体中使用了i而不是t。等下,这到底
在讲这个话题前,首先我们来看一道题:
代码1:
def foo():
return [lambda x: x**i for i in range(1,5,2)]
print([f(3) for f in foo()])
伙伴们,你们认为这里产生的结果是什么呢?我们再来看下这题的变体:
代码:2
def foo():
functions=[]
for i in range(1,5,2):
def inside_fun(x):
return x ** i