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 を返し、結果が画面に出力されます。
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 を返し、結果が画面に出力されます。
3 for i in range(4)
は、連続して 3 を 4 回生成しmax
、イテラブルを取り、最も高い値 (ここでは明らかに 3) を持つ要素を返すジェネレータです。
これは次のように評価されます。
print max([3,3,3,3])
…というのは手の込んだ言い方print 3
です。
expr for x in xs
ジェネレータ式です。通常、 で使用x
しexpr
ます。例えば:
[2*i for i in range(4)] #=> [0, 2, 4, 6]
次のように書き換えることができます。
nums = []
for i in range(4):
nums.append(3)
print max(nums) # 3! Hurrah!
その無意味さがより明白になることを願っています。
表現:
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
それは単にすべてです;)
理解とジェネレータ式の違いについて詳しくは、このドキュメントページをご覧ください。