Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.6如何使常规函数以与lambda相同的方式工作_Python_Function_Lambda_List Comprehension - Fatal编程技术网

Python 3.6如何使常规函数以与lambda相同的方式工作

Python 3.6如何使常规函数以与lambda相同的方式工作,python,function,lambda,list-comprehension,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] 所以,基本上我的_fun()将整数转换成浮点数。当我这样运行它时: new_values = my_fun(types,values) 它返回一个带有浮动的新列表 现在,当需要以常规方式定义函数时

我对将以下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]
所以,基本上我的_fun()将整数转换成浮点数。当我这样运行它时:

new_values = my_fun(types,values)
它返回一个带有浮动的新列表

现在,当需要以常规方式定义函数时:

def my_fun(x,y):
    for i,j in zip(x,y):
        i(j)
它停止工作了。我不会将return放在循环的内部/外部,因为一旦它命中它,它显然会返回第一个/最后一个实例,并且不会尝试分配一个新的列表,如:

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

这似乎更多的是对列表理解的误解。您可以将其表示为:

def my_fun(x,y):
    return [i(j) for i,j in zip(x,y)]
第一个示例中的问题是没有返回任何内容。你可以用它来给你一个迭代器

def my_fun(x,y):
    for i,j in zip(x,y):
        yield i(j)

这似乎更像是对列表理解的误解。您可以将其表示为:

def my_fun(x,y):
    return [i(j) for i,j in zip(x,y)]
第一个示例中的问题是没有返回任何内容。你可以用它来给你一个迭代器

def my_fun(x,y):
    for i,j in zip(x,y):
        yield i(j)

相当于这个λ

lambda x,y:[i(j) for i,j in zip(x,y)] #returns an array/list
是,

或者你的最后一个片段

低于功能

def my_fun(x,y):
    for i,j in zip(x,y):
        i(j)

不返回任何内容。它只是将
j
参数传递给
i
函数并调用它。既没有数组的声明,也没有一组在该数组上存储结果的过程

相当于这个λ

lambda x,y:[i(j) for i,j in zip(x,y)] #returns an array/list
是,

或者你的最后一个片段

低于功能

def my_fun(x,y):
    for i,j in zip(x,y):
        i(j)

不返回任何内容。它只是将
j
参数传递给
i
函数并调用它。既没有数组的声明,也没有一组在该数组上存储结果的过程

“我没有把return放在循环的内部/外部,因为一旦它命中它,它显然会返回第一个/最后一个实例”@dhke我只是在想如何让这个函数进行多次返回以生成一个转换值列表,但显然我的知识不足以理解它。“我不会将return放在循环的内部/外部,因为一旦它命中它,它显然会返回第一个/最后一个实例“@dhke我刚才在想如何让这个函数进行多次返回以生成一个转换值列表,但显然我的知识不足以理解它。列表理解与简单的for循环相比,有什么不同的功能吗?我的意思是,当我理解一个列表并将其传递给一个未声明的变量时,该变量会被一个新的值列表填充,例如,
variable=[I(j)for I,j in zip(types,vals)]
我不太明白你所说的隐藏是什么意思。Python将新创建的列表分配给
变量
,在后台它仍然需要迭代列表并创建它。列表理解是否有一些不同于简单for循环的特性?我的意思是,当我理解一个列表并将其传递给一个未声明的变量时,该变量会被一个新的值列表填充,例如,
variable=[I(j)for I,j in zip(types,vals)]
我不太明白你所说的隐藏是什么意思。Python将新创建的列表分配给
变量
,在后台它仍然需要迭代列表并创建它。