6
print max(3 for i in range(4))
#output is 3

Python 2.6 の使用

3 は私をうんざりさせています。何が起こっているのかを説明しようとしています。

for i in range(4) は、4 回ループするループを作成し、各ループの開始時に i を 0 から 3 にインクリメントします。[このコンテキストで 3 が何を意味するのかわかりません...] max() は、渡された最大の iterable を返し、結果が画面に出力されます。

4

4 に答える 4

14

3 for i in range(4)は、連続して 3 を 4 回生成しmax、イテラブルを取り、最も高い値 (ここでは明らかに 3) を持つ要素を返すジェネレータです。

于 2011-05-13T20:43:55.977 に答える
11

これは次のように評価されます。

print max([3,3,3,3])

…というのは手の込んだ言い方print 3です。

expr for x in xsジェネレータ式です。通常、 で使用xexprます。例えば:

[2*i for i in range(4)] #=> [0, 2, 4, 6]
于 2011-05-13T20:43:03.853 に答える
7

次のように書き換えることができます。

nums = []
for i in range(4):
    nums.append(3)
print max(nums) # 3! Hurrah!

その無意味さがより明白になることを願っています。

于 2011-05-13T20:44:38.587 に答える
3

表現:

print max(3 for i in range(4))

関数の結果を出力しmax()、括弧内に適用されます。ただし、括弧内には、すべての要素がに等しいが、式よりも効率的な方法で、配列に似たものを作成するジェネレータ式があります。3

print max([3 for i in range(4)])

これにより、sの配列が作成され、3不要になった後で破棄されます。

基本的に:括弧内には等しい値のみが作成され、max()関数は最大の値を返すため、複数の要素を作成する必要はありません。要素の数が常に1に等しいため、max()関数は不要になり、コードを次のコードに効果的に置き換えることができます(少なくとも指定した場合)。

print 3

それは単にすべてです;)

理解ジェネレータ式の違いについて詳しくは、このドキュメントページをご覧ください。

于 2011-05-13T21:01:00.160 に答える