Pythonic变量赋值

时间:2015-03-16 10:55:31

标签: python coding-style

目前我有一大段代码如下:

daily_stats.Turnover = int(row[2])
daily_stats.Cars = int(row[0])
daily_stats.Cash = int(row[29])
daily_stats.Card = int(row[33])
daily_stats.Other = int(row[31]) + int(row[35]) + int(row[37])
daily_stats.Exit = int(row[43])
daily_stats.Manual = int(row[42])
daily_stats.Open = int(row[47])

这种情况持续了大约30行,虽然它完成了工作,但并不是非常整洁或者是pythonic。

在Python中有更简洁的方法吗?

1 个答案:

答案 0 :(得分:7)

您可以将数据保存在字典中,然后使用setattr对其进行迭代,以设置daily_stats中的属性。

在您的词典中,值可以采用整数或列表(取决于它们是row中的单个值还是多个求和值)。因此,您可以使用try:... except:...块来使用setattr设置合理的值。

以下是使用随机值的简化版本。请注意,它假定daily_stats支持设置常规任意属性。

class DailyStats(object):
    pass

row = ['10', '20', '30', '40', '50']

daily_stats = DailyStats()

items = {'Turnover':0,
         'Cars':1,
         'Cash':[2,3,4]}

for item, value in items.items():
    try:
        val = sum(int(row[val]) for val in value)
    except TypeError:
        val = int(row[value])
    setattr(daily_stats, item, val)

print(daily_stats.Turnover) # 10
print(daily_stats.Cars) # 20
print(daily_stats.Cash) # 120