在循环中生成变量名称

时间:2015-10-17 20:06:19

标签: python variables attributes

是否可以在循环中生成变量名称?

简单的情况:

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 个答案:

答案 0 :(得分:3)

  

有可能吗?

是。您可以使用setattr内置函数动态地向对象添加属性。你真的这样做吗? Probably not。而不是:

shop1_name, shop2_name, ...为什么没有名单?

shop_names = [...]

更好的是,由于商店似乎有大量与之关联的数据(nameprice,...),您可以使用结构化(或非结构化)记录类型来表示购物然后有一个商店列表。记录类型的示例可以像dictcollections.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(实际上并没有太大的不同),而且您还可以将所有商店作为一个集合进行迭代。

答案 1 :(得分: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)

答案 2 :(得分:0)

使用类似dict的数据结构:

IF()