增量变量,无需初始化

时间:2019-08-22 15:39:52

标签: python python-2.7

我正在从蛋白质中提取很多特征(使用名为UCSF Chimera的科学软件,该软件仅适用于Python 2.7)。

我有一个函数返回NamedTuple,其中包含大量计数器的结果-大约有35个(每个计数器代表某种特征的总和)。

起初,我写了这样的东西:

var1, var2, var3, ... var35 = (0, ) * 35

for my_object in my_objects:
     var1 += my_object.getVar1()
     # etc
     return MyFeatures(var1 = var1, var2 = var2, ...)

这看起来很混乱,部分是因为var1, var2, .... = (0, ) * 35占用了很多行。

我正在考虑像这样重写代码:

for my_object in my_objects:
    var1 = var1+my_object.getVar1() if 'var1' in vars() else my_object.getVar1()
    # etc
    return MyFeatures(var1 = var1, var2 = var2, ...)

但是重复35次可能比以前版本中的初始化块还要糟糕。

您有什么建议吗?初始化一大批计数器是否有某种最佳实践-是否有Python方式增加尚未初始化的变量?

1 个答案:

答案 0 :(得分:1)

您可以将所有计数器放入dict中,然后使用dict.fromkeys方法对其进行初始化:

var_names = ["aaind_molecular_volume_sum", "oh_rxn_constant_sum"]
counters = dict.fromkeys(var_names, 0)
print(counters)
# {'aaind_molecular_volume_sum': 0, 'oh_rxn_constant_sum': 0}

counters["oh_rxn_constant_sum"] += 1
print(counters)
# {'aaind_molecular_volume_sum': 0, 'oh_rxn_constant_sum': 1}