我正在使用graphics.py庫,需要根據用戶需要的數量(可以說是4)創建多個多邊形。每次迭代都會創建唯一對象的循環。 (基於哪個迭代)
我只需要知道如何爲這些多邊形中的每一個創建一個唯一的名稱,例如polygon1,polygon2,polygon4,polygon5。
謝謝。
我正在使用graphics.py庫,需要根據用戶需要的數量(可以說是4)創建多個多邊形。每次迭代都會創建唯一對象的循環。 (基於哪個迭代)
我只需要知道如何爲這些多邊形中的每一個創建一個唯一的名稱,例如polygon1,polygon2,polygon4,polygon5。
謝謝。
你可以處理它作爲一個列表
polygon = []
polygon.append(...)
和訪問他們作爲
polygon[2]
如果你真的想這樣做,你可以:
for i in range(count):
new_poly = Polygon(whatever)
new_name = 'polygon{}'.format(i+1)
然後,你必須將該新名稱和該新多邊形存儲在某處。也許是這樣的:
polygons = {}
for i in range(count):
new_poly = Polygon(whatever)
new_name = 'polygon{}'.format(i+1)
polygons[new_name] = new_poly
如果你認爲你寧願讓每個名字變成一個新的變量......這是一個壞主意。 You don't want to dynamically create variables,因爲你想keep data out of your variable names。
真的,這裏根本不需要名稱。這造成的count
多邊形列表:
polygons = [Polygon(whatever) for _ in range(count)]
而現在,如果你需要用數字來訪問它們,只是這樣做:
polygons[2]
(雖然知道列表是從0開始,不基於1)。或者,如果你需要訪問所有的人,你已經得到了整個列表,所以你不必在任何地方都寫(polygon1, polygon2, polygon3, polygon4)
;只是polygons
。
Yikes,我忽略提及我使用循環的原因是爲了讓我可以操縱多邊形的屬性(將它們的座標向下移動1,超過1),然後再創建它們。 – MassDiffraction
而且,那麼?我認爲這個解決方案仍然可以正常工作。如果是這樣,你甚至可能不需要動態創建變量。只需在我的循環中分配它們。 – aIKid
我會努力工作並回復你。謝謝。 – MassDiffraction
糟糕的方式:
您可以使用exec
。
for i in range(5):
exec("polygon%d = Polygon(something)"%i)
這是非常安全的,因爲i
如果只是一個整數。但使用exec
是確實是不好的做法,因爲它非常脆弱。用戶可以輸入或不小心輸入一段代碼並弄亂你的記憶。所以,除非你真的有這樣做,你不應該使用它。
另外,如果你是全局變量的粉絲,你可以使用它。
globals()["polygon%d"%i] = Polygon(something)
但是也不建議使用全局變量。
更好的方式
或者,你可以將其存儲在一個列表,或字典:
for i in range(5):
lst.append(Polygon(something_else)) #store it in a list
dict['polygon%d'%i] = Polygon(another_thing) #store it in a dict
希望這有助於!
[你不想動態創建變量](http://stupidpythonideas.blogspot.com/2013/05/why-you-dont-want-to-dynamically-create.html),因爲你想要[將數據保留在變量名稱之外](http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html)。只需使用多邊形對象的「列表」,然後就可以將它們稱爲「多邊形[2]」,依此類推。 – abarnert
保留在列表/字典/集取決於你如何訪問它們 –
可能的重複[在Python中,如何在循環中創建大量變量?](http://stackoverflow.com/questions/ 8129190/in-python-how-to-create-a-loop-of-variable-of-variables) –