Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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
应用函数列表的Pythonic方法?_Python_Python 3.x - Fatal编程技术网

应用函数列表的Pythonic方法?

应用函数列表的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

我还是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:
            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