在循环中生成变量名

2024-09-28 20:48:08 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以在循环中生成变量名?你知道吗

简单的情况是:

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,我想把它们填充到一个循环中,而不是手工编写所有这些属性。你知道吗

有可能吗?你知道吗


Tags: nameinselfnone属性is情况product
3条回答

Is it possible?

是的。可以使用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(这其实没有太大区别),而且您还可以将所有商店作为一个集合进行迭代。你知道吗

使用类似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

使用字典还是列表?你知道吗

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

添加商店用途:

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

或者只是列出:

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

加上他的用法:

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

相关问题 更多 >