私は、JavaScriptでできる状況に出会ったとき、foreach
関数があれば便利だといつも思っています。foreachとは、以下に説明する機能を意味します。
def foreach(fn,iterable):
for x in iterable:
fn(x)
彼らはすべての要素でそれを行うだけで、何かを生成したり返したりしませんでした、それは組み込み関数であり、純粋なPythonで書くよりも高速であるはずですが、リストに見つかりませんでした、またはそれは単に別の名前を呼んだのですか?それとも私はここでいくつかのポイントを逃していますか?
多分私は間違ったかもしれません、Pythonで関数を呼び出すのは高くつくので、間違いなくこの例では良い習慣ではありません。関数は、outループではなく、本体のループを実行する必要があります。これは、以下のようになり、Pythonの多くのコード提案ですでに言及されています。
def fn(*args):
for x in args:
dosomething
しかし、私はforeachが2つの事実に基づいてまだ歓迎されていると思いました:
- 通常の場合、人々はパフォーマンスを気にしません
- APIが反復可能なオブジェクトを受け入れず、そのソースを書き換えることができない場合があります。
for
ためです。
list.each(func)
よりもきれいですfor item in list: func(item)
。問題は、Pythonのは、同様の機能お気に入り置き換えるの良い仕事行われていることであるmap()
とfilter()
単純にそのビルトインを拡張するリスト内包とfor
し、if
(均質と読める)と特定は.each()
その反するかもしれません。
sum(0 for _ in map(f, seq))
読みやすい回避策です。
for
ループを使用することの何が問題になっていますか?