2015-10-17 2 views
-3

Возможно ли сгенерировать имена переменных в цикле?Генерировать имена переменных в цикле

Простая ситуация:

class product(): 
    self.shop1_name = None 
    self.shop1_price = None 
    self.shop2_name = None 
    self.shop2_price = None 
    ... 

p = product() 

# shops is a list of shops 
for i, shop in enumerate(shops[0:5]): 
    p.shop+i+1_name = shop.name # so shop1_name in first loop, shop2_name in second etc... 
    p.shop+i+1_price = shop.price 

Таким образом, есть много атрибутов shop1_price, shop2_price...shop10_price, и я хочу, чтобы заполнить их в одну петлю, чтобы не иметь записи всех их вручную.

Возможно ли это?

ответ

3

Возможно ли это?

Да. Вы можете динамически добавлять атрибуты к объекту с помощью встроенного setattr. Вы на самом деле хотите сделать это? Probably not. Вместо того, чтобы иметь:

shop1_name, shop2_name, ... Почему бы не иметь список?

shop_names = [...] 

еще лучше, так как магазины, кажется, есть много данных, связанных с ними (name, price, ...), вы могли бы иметь структурированную (или неструктурированной) тип записи для представления магазин а затем список магазинов. Примеры типа записи может быть столь же простым, как dict или collections.namedtuple, или вы можете добавить класс облегченной для хранения данных магазина:

class Shop(object): 
    def __init__(self, name, price): 
     self.name = name 
     self.price = price 

shops = [Shop('name1', 100), Shop('name2', 200), ...] 

Теперь, вместо shop1_name, у вас есть shops[0].name (который действительно ISN «слишком разные»), плюс вы получаете возможность перебирать все ваши магазины как коллекцию.

0

Использовать словари или списки?

Shop = [{'name': "Nisa Local", 'price': 5000},{'name': "Tescos", 'price': 800000}] 

Чтобы добавить использование магазина:

Shop.append({'name': "Asda", 'price': 10000}) 

или просто перечисляет:

ShopNames = ['Nisa Local', 'Tescos'] 
ShopPrices = [5000, 800000] 

и добавить использование tyhis:

ShopNames.append('Asda') 
ShopPrices.append(10000) 
0

Использование структуры данных подобно dict:

class product(): 
self.shops = [ {'name': None, 'price': None}, ... ] 
... 

p = product() 

# shops is a list of shops 
for i, shop in enumerate(shops[0:5]): 
    p.shops[i]['name'] = shop.name 
    p.shops[i]['price'] = shop.price 
+0

'shop.name' не будет работать так, как в Javascript. 'shop ['name']' будет. – mgilson

Смежные вопросы