我对将以下lambda函数转换为常规函数感到有点困惑:
my_fun = lambda x,y:[i(j) for i,j in zip(x,y)]
其中x是类型列表,比如说
types = [float,float,float]
并且y是整数值列表,例如:
values = [1,2,3]
所以,基本上my_fun()将整数转换为浮点数。当我以这种方式运行时:
new_values = my_fun(types,values)
它返回一个带浮点数的新列表。
现在以常规方式定义一个函数:
def my_fun(x,y):
for i,j in zip(x,y):
i(j)
它停止工作。我不会在循环内部/外部返回,因为它一旦命中它就显然会返回第一个/最后一个实例,而不是尝试分配一个新的列表,如:
def my_fun(x,y):
new_vals = []
for i,j in zip(x,y):
new_vals.append(i(j))
return new_vals
因为在这种情况下这个功能看起来不知所措。 有人可以在我的案例中解释lambda和常规函数之间的根本区别,因为我似乎缺少一些关于Python 3.6的简单基础知识吗?
我认为这可能是我在lambda中使用的列表理解,但我无法向自己解释。 非常感谢!
答案 0 :(得分:3)
这似乎更多是对列表理解的误解。您可以将其表达为:
def my_fun(x,y):
return [i(j) for i,j in zip(x,y)]
你的第一个例子中的问题是你没有返回任何东西。您可以使用yield为您提供迭代器。
def my_fun(x,y):
for i,j in zip(x,y):
yield i(j)
答案 1 :(得分:1)
相当于这个lambda
lambda x,y:[i(j) for i,j in zip(x,y)] #returns an array/list
是,
def myfun(x,y):
return [i(j) for i, j in zip(x,y)]
或您的最后一个片段。
以下功能
def my_fun(x,y):
for i,j in zip(x,y):
i(j)
不会返回任何内容。它只是将j
参数传递给i
函数并调用它。既没有数组声明,也没有一组程序在该数组上存储结果。