16

次のステートメントは、Python で正確に何を意味しますか?

randrange(10**10) for i in range(100)

randrangeそれが乱数発生器であることは承知していますが、ステートメントの効果を実際に理解することはできません。

4

2 に答える 2

35

あなたがそれを投稿した方法、それはSyntaxError.
しかし、ステートメントは内部にあると思い[]ます。次に、100 個の乱数を含むリストを作成するリスト内包表記です。これは、次のコードと同等です。

whatever = []
for i in range(100):
    whatever.append(randrange(10**10))

()コードが代わりに内部にある[]場合は、ジェネレータ式、つまりアイテムがすぐに作成されずにオンデマンドで作成される反復可能オブジェクトになります。

于 2012-05-09T09:05:57.277 に答える
25

それ自体では、構文エラーになります。括弧で囲まれているのは、ジェネレータ式です:

(randrange(10**10) for i in range(100))

を 100 回呼び出した結果をrandrange(10**10)一度に 1 つずつ生成するジェネレータを返します。

角括弧内はリスト内包表記です:

[randrange(10**10) for i in range(100)]

それぞれの呼び出しから得られた 100 個の番号のリストを返しますrandrange(10**10)

リスト内包表記に対するジェネレーター式の利点は、遅延評価されるため、リスト全体を構築してメモリ内に保持する必要がないことです (これは、非常に大きく、場合によっては無限のジェネレーターに特に関連します)。

于 2012-05-09T09:06:14.460 に答える