0

私は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() を置き換えることができる標準関数はありますか?

4

3 に答える 3

3

ジェネレータ式でanyを使用できます:

def isSomething(s):
   return any(f(s) for f in listFunctions))

anyジェネレーター式で使用することの良い点の 1 つは、一部が Truish 値を返すanyとすぐに短絡することです。そのため、すべての関数がたまたま Falsish 値を返さない限り、f(s)すべての関数が呼び出されるわけではありません。listFunctions

于 2013-09-19T19:57:59.383 に答える
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_allmapます。

def apply_all(functions, arg):
    return map(lambda function: function(arg), functions)
于 2013-09-19T19:56:37.877 に答える
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
于 2013-09-19T20:02:39.323 に答える