Python 3.6如何使常规函数与lambda一样工作

时间:2017-04-07 06:01:32

标签: python function lambda list-comprehension

我对将以下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中使用的列表理解,但我无法向自己解释。 非常感谢!

2 个答案:

答案 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函数并调用它。既没有数组声明,也没有一组程序在该数组上存储结果。