2015-10-17 188 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 = [...] 

更妙的是,因爲商店似乎有很多與之相關的數據(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(真正的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

使用數據結構像字典:

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