我正在尝试这样做:
foo = lambda x: x > 0
lst = [-2, 1, 0, -5, 8]
filtered_lst = [x for x in lst if foo ]
print(filtered_lst)
不工作。
虽然它是这样工作的:
filtered_lst = list(filter(foo, lst))
print(filtered_lst)
问题是什么?
我正在尝试这样做:
foo = lambda x: x > 0
lst = [-2, 1, 0, -5, 8]
filtered_lst = [x for x in lst if foo ]
print(filtered_lst)
不工作。
虽然它是这样工作的:
filtered_lst = list(filter(foo, lst))
print(filtered_lst)
问题是什么?
你
lambda的没有参数,并在条件中取值<function <lambda> at 0x00000000030705F8>。默认值为True,因此您的列表没有更改(相当于[x for x in lst if 1==1])。如果您添加一个调用
()和一个参数,那么该函数将起作用:顺便说一句,与列表中的条件有关就足够了
[x for x in lst if x > 0]您还可以注意到,您将
lambda它用作普通函数,比较,记录短了几个字符,只是:在我看来,在没有声明的情况下使用 lambda 是合理的,通常作为输入参数,例如:
如果你不使用 lambda,那么它会变得很麻烦,并且可能在其他任何地方都不需要该函数,这不会使代码更具可读性:
Filter是一个“独立”的工具,让我们考虑一下它的参数:函数(没有调用)和序列。在您的工作示例中,您正确指定了函数名称并
filter执行了“您的”任务。在简单的列表表达式中,为了使函数工作,必须调用它。另外...“独立”工具(包括
filter,map)支持以下语法: