Как вы делаете идентификатор из сцепленных строк в Python 3 - PullRequest
0 голосов
/ 26 декабря 2010

В основном я хочу превратить строку в идентификатор для объекта, например, так:

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

Я хочу создать серию объектов с именами, такими как foo1, foo2, foo3, foo4, foo5,и т.д ... Но я не знаю, как превратить эти строки в идентификаторы для объектов.Помогите!

Ответы [ 5 ]

3 голосов
/ 26 декабря 2010

Вы не делаете. Вы используете массив (он же список в Python) или словарь, если вы хотите / должны использовать что-то более причудливое, чем последовательные целые числа (например, строки), для идентификации отдельных элементов. .

Например:

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

Впоследствии вы можете ссылаться на первое foo как foos[0], а 50-е foo - как foo[49] (индексы начинаются с 0 - конечно, это кажется странным, но как только вы к этому привыкнете, это как минимум хорошо, если все согласны с одним - и Python поощряет индексы, основанные на 0, например, range считает от 0).

Кроме того, ваш код может быть еще более упрощен. Если вы просто хотите сгенерировать список Object экземпляров, вы можете использовать понимание списка (возможно, потребуется некоторое время, пока ваш класс, книга или учебное пособие не расскажут об этом ...). Кроме того, в вашем конкретном примере count и i идентичны и, следовательно, могут быть объединены (и когда вы хотите считать по чему-то, что вы повторяете, например for item in items: ..., вы можете использовать for count, item in enumerate(items)).

3 голосов
/ 26 декабря 2010

Сделайте это вместо:

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'])
2 голосов
/ 26 декабря 2010

Ваш вариант использования абсурден, так как для этого нужно использовать массив ... но если предположить, что вам это действительно нужно, то хитрость использует

globals()[name] = value
1 голос
/ 26 декабря 2010

вы ищете словарь?

вы можете сделать это:

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

и создать диктовку с keys() подобно ['foo1', 'foo2', ...] для доступа к вашим объектам.

0 голосов
/ 26 декабря 2010

Используйте функцию exec :

>>> for i in range(50):
...    count += 1
...    exec("foo%d = %d" % (count,count))
... 
>>> foo1
1
>>> foo2
2
>>> foo3
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...