每次迭代都会创建唯一对象的循环。 (基于哪个迭代)

时间:2013-10-25 02:01:08

标签: python loops python-3.x

我正在使用graphics.py lib,需要根据用户想要的数量创建多个多边形(比方说4)。

我只需要知道如何为每个多边形创建一个唯一的名称,例如polygon1,polygon2,polygon4,polygon5。

感谢。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以将其作为列表处理

polygon = []
polygon.append(...)

并将其作为

访问
polygon[2]

答案 2 :(得分:1)

糟糕的方式:

您可以使用exec

for i in range(5):
    exec("polygon%d = Polygon(something)"%i)

这是非常安全的,因为i if只是一个整数。但是使用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

希望这会有所帮助!!