我有一個叫做Points
的類,我需要創建100個點。 我需要做的是這樣的:一個類的多個實例
class Point(object)
...
for i in range(1,100):
pi = Point()
點應該被命名爲p1
,p2
,... p100
該線以上不工作,效果顯着。
現在的問題是:我知道我可以在循環內使用exec
來創建100點,但是有沒有更好的方法可以不使用exec
?
我有一個叫做Points
的類,我需要創建100個點。 我需要做的是這樣的:一個類的多個實例
class Point(object)
...
for i in range(1,100):
pi = Point()
點應該被命名爲p1
,p2
,... p100
該線以上不工作,效果顯着。
現在的問題是:我知道我可以在循環內使用exec
來創建100點,但是有沒有更好的方法可以不使用exec
?
您可以使用列表中理解的幾個對象:
# 100 points in list
points = [Point() for _ in range(100)]
創建/使用動態變量被認爲是Python中的壞習慣。這是很容易讓你失去跟蹤他們,導致名稱衝突等
相反,你可以使用一個dict comprehension和str.format
創建命名實例的字典:
points_dict = {"p{}".format(x):Point() for x in range(1, 101)}
然後,您可以按照如下名稱訪問這些實例:
points_dict["p1"]
points_dict["p10"]
# etc.
您的索引和範圍端點是錯誤的。 – user2357112
固定。我實際上改變了我的答案,使用字典理解,以便實例被命名爲OP所需。 – iCodez
非常感謝您的回答。我從他們身上學到了很多東西。
無論如何,我不需要點或點的字典列表。
想象我開始寫作:
P1 =點() P2 =點() 。 。 。 p100 =點()
我將獲得100分,沒有更多。那是我需要的。我相信把上面的100行代碼放在程序中並不是一個好習慣!此外,創建的點數可能會變化。這就是爲什麼我認爲應該有一個優雅的方式來做到這一點。謝謝。
請參閱[_你爲什麼不想動態創建變量_](http://stupidpythonideas.blogspot.com/2013/05/why-you-dont-want-to-dynamically-create.html)。 – martineau