206

foreachjavascriptでできる場面に遭遇したとき、何か機能があれば便利だなと常々思っています。foreach とは、以下で説明する関数を意味します。

def foreach(fn,iterable):
    for x in iterable:
        fn(x)

彼らはすべての要素でそれを行うだけで、何かを生成したり返したりしませんでした.組み込み関数である必要があり、純粋なPythonで書くよりも高速であるはずですが、リストに見つかりませんでした.それは別の名前を呼んだだけですか?それとも、ここでいくつかの点を見逃しているだけですか?

多分私が間違っていたのかもしれません.Pythonで関数を呼び出すとコストが高くなります.この例では間違いなく良い習慣ではありません. out ループではなく、関数は、多くの python のコード提案で既に言及されている以下のように見える本体の側でループを実行する必要があります。

def fn(*args):
    for x in args:
       dosomething

しかし、次の2つの事実に基づいて、 foreach はまだ歓迎されていると思いました:

  1. 通常、人々はパフォーマンスを気にしません。
  2. API が iterable オブジェクトを受け入れず、そのソースを書き直すことができない場合があります。
4

13 に答える 13

226

私が見た "foreach" (PHP、C# など) はすべて、基本的に Python の "for" ステートメントと同じです。

これらはほぼ同等です。

// PHP:
foreach ($array as $val) {
    print($val);
}

// C#
foreach (String val in array) {
    console.writeline(val);
}

// Python
for val in array:
    print(val)

そう、はい、Python には「foreach」があります。「用」といいます。

あなたが説明しているのは「配列マップ」関数です。これは、Pythonのリスト内包表記で行うことができます。

names = ['tom', 'john', 'simon']

namesCapitalized = [capitalize(n) for n in names]
于 2013-08-18T00:33:51.117 に答える
66

foreachPython にはステートメント自体がありません。for言語に組み込まれたループがあります。

for element in iterable:
    operate(element)

本当にしたい場合は、独自のforeach関数を定義できます。

def foreach(function, iterable):
    for element in iterable:
        function(element)

補足として、for element in iterable構文はPython の影響の 1 つである ABCプログラミング言語から来ています。

于 2013-08-18T00:18:40.117 に答える
35

その他の例:

Python Foreach ループ:

array = ['a', 'b']
for value in array:
    print(value)
    # a
    # b

Python For ループ:

array = ['a', 'b']
for index in range(len(array)):
    print("index: %s | value: %s" % (index, array[index]))
    # index: 0 | value: a
    # index: 1 | value: b
于 2017-04-26T16:34:06.173 に答える
13

map質問に記載されている状況に使用できます。

例えば

map(len, ['abcd','abc', 'a']) # 4 3 1

複数の引数を取る関数の場合、マップにさらに引数を指定できます。

map(pow, [2, 3], [4,2]) # 16 9

Python 2.x ではリストを返し、Python 3 ではイテレータを返します。

関数が複数の引数を取り、引数がすでにタプル (または Python 2.6 以降のイテラブル) の形式になっている場合は、 を使用できますitertools.starmap。(これは、探していたものと非常によく似た構文を持っています)。イテレータを返します。

例えば

for num in starmap(pow, [(2,3), (3,2)]):
    print(num)

8 と 9 が得られます

于 2013-08-18T00:38:45.130 に答える
2

私があなたを正しく理解していれば、関数「func」がある場合、リスト内の各項目について func(item) が true を返すかどうかを確認したいということです。あなたがすべてに当てはまるなら、何かをしてください。

「すべて」を使用できます。

例: リスト内の 0 ~ 10 の範囲のすべての素数を取得したい:

from math import sqrt
primes = [x for x in range(10) if x > 2 and all(x % i !=0 for i in range(2, int(sqrt(x)) + 1))]
于 2017-06-02T09:09:54.687 に答える
1

より簡潔な構文を探しているだけの場合は、forループを 1 行に入れることができます。

array = ['a', 'b']
for value in array: print(value)

追加のステートメントをセミコロンで区切るだけです。

array = ['a', 'b']
for value in array: print(value); print('hello')

これはローカルのスタイル ガイドに準拠していない可能性がありますが、コンソールで遊んでいる場合は、このようにするのが理にかなっている可能性があります。

于 2019-06-17T21:44:16.820 に答える