2011-08-01 22 views
1

で定義すると、同じクラスの複数のオブジェクトを1行に定義する簡略化された方法があります。 (私は、リストまたはオブジェクトの配列の話ではない)。..同じクラスの複数のオブジェクトをPython

私は

p1,p2,p3 = Point() 

任意の提案のようなものを意味ですか?

+0

それは何を意味するのでしょうか?あなたは何をすべきだと思っているのかについていくつか説明していただけますか? –

答えて

1

は、マップはここにも受け入れ可能であると考えて

p1, p2, p3 = (Point() for x in xrange(3)) 
+0

それはリストの理解ではなく、発電機の理解です。 – JAB

+0

@JAB:それは[generator ** expression **](http://docs.python.org/reference/expressions.html#generator-expressions)です。発生者の理解はありません – SingleNegationElimination

+0

@TokenMacGuy:ドキュメント内の他の場所での構文の使用を検討する「生成者の理解」は、「リストとして」または「dict」としてではなく、単に「ジェネレータとして包まれた理解」を意味すると解釈することができます。結局のところ、ほとんどの人が「リスト内包」と呼んでいるのは、実際には、あなたが提供したリンクに示されているように、「リスト表示内に含まれる(リスト)内包」です。 – JAB

3

p1, p2, p3 = [Point() for x in range(3)] 
2

正確に達成しようとしていることはありますか?

このコードは、あなたが求めているものを行いますが、私は、これはあなたの最終的な目標であるかどうかを知りません:

p1, p2, p3 = [Point() for _ in range(3)] 
+0

それはそれでした:-) – Rushil

6

これは、発電機の理解ではなく、リストの内包表記を使用するために、わずかに、より効率的な場合があります

p1, p2, p3 = (Point() for _ in range(3)) # use xrange() in versions of Python where range() does not return an iterator for more efficiency 

アドバかかり

p1, p2, p3 = Point(), Point(), Point() 

の簡単な解決策もあります暗黙のタプルパッキングとアンパックのナゲット。

p1, p2, p3 = map(lambda x: Point(), xrange(3)) 

しかし、ジェネレータ式は少し速くなるようだ:

+0

これはまさに私が望んでいたものです.thnx – Rushil

関連する問題