动态定义变量名称

时间:2014-11-06 14:38:45

标签: python

我已经编写了一些我想通过创建我的类的多个实例来测试的类。我希望这些实例的名称遵循模式p1p2等:

p1 = Point(1,1)
p2 = Point(2,2)
p3 = Point(3,3)

对于很多变量,有没有办法快速完成这项工作?像这样:

for i in range(1,1000):
    *magic goes here*
isinstance(p500, Point) # True

3 个答案:

答案 0 :(得分:6)

它被称为列表:

p = [Point(1, 1), Point(2, 2), Point(3, 3)]

现在p[0]是您的p1等等。

p = [Point(i, i) for i in range(1, 1000)]
isinstance(p[500], Point)  # True

答案 1 :(得分:1)

您可以将它们存储为字典中的键

vars_dict = {}
for i in range(1,1000):
    vars_dict['p{}'.format(i)] = Point(i, i)
isinstance(vars_dict['p500'], Point) # True

或在@RemcoGerlich的迭代中

答案 2 :(得分:1)

您可以修改当前范围,更改globals()

例如:

globals()['p234'] = Point(1, 2)
print p234

然而,这是一种非常差的质量方法:难以理解,维护,创建一个可怕的范围污染而且它很慢(尽管这可能不重要)。使用正确的数据容器,我建议一个列表:

points = [Point(i, i) for i in xrange(500)]
assert isinstance(p[-1], Point)

这样你就可以在每个对象上做一个断言,如:

points = [Point(i, i) for i in xrange(500)]
for point in points:
    assert isinstance(point, Point)