python - 映射多个函数(在可迭代中),单个对象

时间:2013-09-19 19:55:24

标签: python

我对python很新,但还是要完全理解它的概念。 或者代码是这样的

def isSomething(s):
    result=False
    for f in listFunctions:
        if f(s):
            result=True
return result

所以我想知道是否有这样的事情

def isSomething(s):
   return any(mapManyFunctions2Object(listFunctions,s))

其中mapManyFunctions2Object()就像是映射函数和对象的可迭代列表。

是否有任何标准函数可以替换mapManyFunctions2Object()?

3 个答案:

答案 0 :(得分:3)

您可以将anygenerator expression

一起使用
def isSomething(s):
   return any(f(s) for f in listFunctions))

any与生成器表达式一起使用的一个好处是any只要某些f(s)返回Truish值就会短路。因此,listFunctions中的所有函数都不会被调用,除非它们都碰巧返回Falsish值。

答案 1 :(得分:1)

您可以轻松地编写这样的功能:

def apply_all(functions, arg):
    return [function(arg) for function in functions]

或者,如果你想要一个3.x风格的map - 如:

def apply_all(functions, arg):
    yield from (function(arg) for function in functions)

但是,你真的不需要,因为你可以轻松地使用表达式。

map因历史原因,其他语言的熟悉程度等而值得拥有 - 只要要映射的东西是一个名称很好的函数,很多人会立即明白map(frotz, widgets)的含义。我不认为apply_all(frotzers, widget)会这样。


只是为了好玩,用apply_all来定义map

def apply_all(functions, arg):
    return map(lambda function: function(arg), functions)

答案 2 :(得分:0)

你可以轻松地做到这一点:

>>> listFunctions = [lambda x: x == 1, lambda x: x == 2, lambda x: x == 3]
>>> def isSomething(x):
...     return any(f(x) for f in listFunctions)
... 
>>> isSomething(3)   # run functions from list on 3, get results False, False and, finally, True
True
>>> isSomething(5)   # run functions from list on 5, all results is False
False