Cyb*_*cob 2 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])
Run Code Online (Sandbox Code Playgroud)
这种情况持续了大约30行,虽然它完成了工作,但并不是很整洁或者是pythonic.
有没有更简洁的方法在Python中执行此操作?
您可以将数据保存在字典中,然后在使用setattr时设置属性进行迭代daily_stats.
在你的dict中,值可以采用整数或列表(取决于它们是单个值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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |