应用函数列表的Pythonic方法?
我还是python新手,我想知道是否有一种方法可以将此函数简化为接近一行程序的形式:应用函数列表的Pythonic方法?,python,python-3.x,Python,Python 3.x,我还是python新手,我想知道是否有一种方法可以将此函数简化为接近一行程序的形式: filters = [lambda x: is_big(x), lambda x: is_wide(x), lambda x: is_gray(x)] def filter(input): for func in filters: if(not func(input)): return False else: continu
filters = [lambda x: is_big(x), lambda x: is_wide(x), lambda x: is_gray(x)]
def filter(input):
for func in filters:
if(not func(input)):
return False
else:
continue
return True
假设过滤器列表中的函数返回布尔值。基本上,是否有任何方法可以执行类似于all(将输入应用到每个过滤器)
是的,您可以使用:
是的,您可以使用:
以下是从输入中获得过滤输出的列表:
filtered = [x for x in input if all(f(x) for f in filters)]
您还可以使用内置过滤器:
complete_filter = lambda x: all(f(x) for f in filters)
filtered = filter(complete_filter, input)
在旁注上(不确定其他人所说的all
不短路是什么意思)。见下文:
def f():
print "in f"
return True
def g():
print "in g"
return False
def h():
print "in h"
return True
filters = [f, g, h]
print all(fn() for fn in filters)
这张照片
in f
in g
False
>>>
以下是从输入中获得过滤输出的列表:
filtered = [x for x in input if all(f(x) for f in filters)]
您还可以使用内置过滤器:
complete_filter = lambda x: all(f(x) for f in filters)
filtered = filter(complete_filter, input)
在旁注上(不确定其他人所说的all
不短路是什么意思)。见下文:
def f():
print "in f"
return True
def g():
print "in g"
return False
def h():
print "in h"
return True
filters = [f, g, h]
print all(fn() for fn in filters)
这张照片
in f
in g
False
>>>
仅供参考,
[lambda x:is_big(x),lambda x:is_wide(x),lambda x:is gray(x)]
相当于[is_big,is_wide,is_gray]
@StevenRumbalski对!是的,我知道,但说实话,我实际上并不知道。仅供参考,[lambda x:is_big(x),lambda x:is_wide(x),lambda x:is_gray(x)]
相当于[is_big,is_wide,is_gray]
@StevenRumbalski对!是的,我知道,但说实话,我其实不知道。哦,有趣。关于过滤器中func的func(输入)的简写符号,我能读到什么文档吗?你能详细介绍一下短路吗?all
在第一个False之后不返回False吗?@Dzhao:这是一个生成器表达式。哦,有趣。关于过滤器中func的func(输入)的简写符号,我能读到什么文档吗?你能详细介绍一下短路吗?all
在第一个False之后不返回False吗?@Dzhao:这是一个生成器表达式。但是在第一次失败后,all
不是已经停止执行了吗?请参阅我编辑的答案以了解我的意思。@BAH是对的,所以您应该使用列表理解而不是生成器表达式。但是第一次失败后,all
不是已经停止执行了吗?请参阅我编辑的答案以了解我的意思。@BAH是正确的,因此您应该使用列表理解而不是生成器表达式。它没有执行函数h
。否则,您将在输出中看到h中的。我是不是遗漏了什么?除非我在这里没有看到真正明显的东西,否则它在g
上短路,返回False
。它没有执行函数h
。否则,您将在输出中看到h中的。我是不是遗漏了什么?除非我在这里没有看到真正明显的东西,否则它在g
上短路,返回False
。