-1

基本上我想将一个字符串转换为一个对象的标识符,如下所示:

count = 0
for i in range(50):
   count += 1
   functionToMakeIdentifier("foo" + str(count)) = Object(init_variable)

我想制作一系列名称为 foo1、foo2、foo3、foo4、foo5 等的对象……但我不知道如何将这些字符串转换为对象的标识符。帮助!

4

5 回答 5

3

改为这样做:

foos = [Object(init_variable) for _ in range(50)]
print(foos[0]) # first item

您现在有一个包含 50 个Object项目的列表。

也许,如果你真的想使用这些foo1字符串,你可以这样做

foo_dict = {'foo%d'.format(i) : Object(init_variable) for i in range(1,51)]
print(foo_dict['foo1'])
于 2010-12-25T22:22:11.847 回答
3

你没有。如果您想/需要使用比连续整数(例如字符串)更花哨的东西来识别各个项目,您可以使用数组(在 Python 中也称为列表)或字典。

例如:

foos = []
count = 0
for i in range(50):
   count += 1
   foos.append(Object(init_variable))

之后,您可以将第一个fooasfoos[0]和第 50个foo称为foo[49](索引从 0 开始 - 确实看起来很奇怪,但是一旦你习惯了它,只要每个人都同意一件事,它至少一样好 - 而 Python 鼓励 0基于索引,例如range从 0 开始计数)。

此外,您的代码可以进一步简化。如果您只想生成Object实例列表,则可以使用列表推导(可能需要一段时间,直到您的课程、书籍或教程涵盖此内容......)。此外,在您的具体示例中,countandi是相同的,因此可以合并(当您想计算您迭代的for item in items: ...内容时,您可以使用for count, item in enumerate(items))。

于 2010-12-25T22:23:00.690 回答
2

您的用例很荒谬,因为有人会为此使用数组...但是假设您确实需要它,那么诀窍就是使用

globals()[name] = value
于 2010-12-25T22:37:05.207 回答
1

你在找字典吗?

你可以这样做:

foos = {}
for i in range(50):
   foos['foo%d' % i] = MyObject()

并创建一个带有keys()like的字典['foo1', 'foo2', ...]来访问您的对象。

于 2010-12-25T22:49:04.530 回答
0

使用执行功能:

>>> for i in range(50):
...    count += 1
...    exec("foo%d = %d" % (count,count))
... 
>>> foo1
1
>>> foo2
2
>>> foo3
3
于 2010-12-25T22:22:46.047 回答