Python 3.6如何使常规函数以与lambda相同的方式工作
我对将以下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) 它返回一个带有浮动的新列表 现在,当需要以常规方式定义函数时
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将新创建的列表分配给变量
,在后台它仍然需要迭代列表并创建它。