Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在每次迭代中创建唯一对象的循环。(基于哪个迭代)_Python_Loops_Python 3.x - Fatal编程技术网

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

Python 在每次迭代中创建唯一对象的循环。(基于哪个迭代),python,loops,python-3.x,Python,Loops,Python 3.x,我使用的是graphics.py库,需要根据用户需要的多边形数量创建一些多边形(比如4个) 我只需要知道如何为每个多边形创建一个唯一的名称,例如polygon1、polygon2、polygon4、polygon5 谢谢。您可以将其作为列表处理 polygon = [] polygon.append(...) 并访问它们作为 polygon[2] 你可以把它当作一个列表来处理 polygon = [] polygon.append(...) 并访问它们作为 polygon[2] 如果你真

我使用的是graphics.py库,需要根据用户需要的多边形数量创建一些多边形(比如4个)

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


谢谢。

您可以将其作为列表处理

polygon = []
polygon.append(...)
并访问它们作为

polygon[2]

你可以把它当作一个列表来处理

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
如果你想让每个名字都变成一个新的变量,那是个坏主意,因为你想

实际上,这里根本不需要名字。这将创建
count
多边形列表:

polygons = [Polygon(whatever) for _ in range(count)]
现在,如果您需要通过号码访问它们,只需执行以下操作:

polygons[2]
(但请注意,列表是基于0的,而不是基于1的)


或者,如果您需要访问所有这些文件,您就拥有了完整的列表,因此您不必到处写
(polygon1、polygon2、polygon3、polygon4)
;只要
多边形

如果您真的想这样做,您可以:

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
如果你想让每个名字都变成一个新的变量,那是个坏主意,因为你想

实际上,这里根本不需要名字。这将创建
count
多边形列表:

polygons = [Polygon(whatever) for _ in range(count)]
现在,如果您需要通过号码访问它们,只需执行以下操作:

polygons[2]
(但请注意,列表是基于0的,而不是基于1的)


或者,如果您需要访问所有这些文件,您就拥有了完整的列表,因此您不必到处写
(polygon1、polygon2、polygon3、polygon4)
;只需
多边形

坏方法:

您可以使用
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

希望这有帮助

坏方法:

您可以使用
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


希望这有帮助

,因为你想。只需使用多边形对象的
列表
,然后您就可以将它们称为
多边形[2]
,依此类推。根据您需要访问它们的方式,将它们保存在列表/目录/集合中,因为您想这样做。只需使用多边形对象的
列表
,然后您就可以将它们称为
多边形[2]
,依此类推。根据您需要访问它们的方式,将它们保存在列表/目录/集合中
exec
的可能副本会加倍糟糕。如果确实要动态创建变量,请使用
globals()[name]=value
(或
setattr(self,name,value)
等),而不是
exec
。不,甚至没有理由提及
exec
globals
。我不知道这是否值得否决票,但如果你重新组织它会更好。这意味着
global
是一种“更好的方式”,实际上你应该说list或dict是一种更好的方式,globals是一种非常糟糕的方式,exec是一种更糟糕的方式……现在这就糟糕了。为什么要投否决票?我还提到使用列表和字典,其他的都是额外的。也许是一笔不好的奖金。@abarnert好吧,我会听从你的建议。你是一个很好的老师。
exec
是一个非常糟糕的老师。如果确实要动态创建变量,请使用
globals()[name]=value
(或
setattr(self,name,value)
等),而不是
exec
。不,甚至没有理由提及
exec
globals
。我不知道这是否值得否决票,但如果你重新组织它会更好。这意味着
global
是一种“更好的方式”,实际上你应该说list或dict是一种更好的方式,globals是一种非常糟糕的方式,exec是一种更糟糕的方式……现在这就糟糕了。为什么要投否决票?我还提到使用列表和字典,其他的都是额外的。也许是一笔不好的奖金。@abarnert好吧,我会听从你的建议。你是个很好的老师。哎呀,我忘了提到我使用循环的原因是为了在创建多边形时可以操纵多边形的属性(将它们的坐标向下移动1,超过1)。那么呢?我认为这个解决方案仍然有效。。如果是这样,您甚至不需要动态创建变量。只要在我的循环中分配它们,我会处理一下,然后再给你回复。谢谢。@MassDiffraction:这正是列表的完美之处:您可以根据需要对其进行多次循环,例如对多边形中的多边形执行
:polygon.shift(1,1)
。Yikes,我忘了提到我使用循环的原因是为了可以操纵多边形的属性(