我对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()?
答案 0 :(得分:3)
您可以将any与generator 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