我有一个叫做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