Python 不初始化的增量变量

Python 不初始化的增量变量,python,python-2.7,Python,Python 2.7,我正在从一种蛋白质中提取一系列特征(使用一个名为UCSF Chimera的科学软件,它只适用于Python 2.7) 我有一个函数,它返回一个名为tuple的,其中包含大量计数器的结果——大约35个计数器(其中每个计数器代表某种功能的总和) 起初,我写了这样的东西: var1, var2, var3, ... var35 = (0, ) * 35 for my_object in my_objects: var1 += my_object.getVar1() # etc

我正在从一种蛋白质中提取一系列特征(使用一个名为UCSF Chimera的科学软件,它只适用于Python 2.7)

我有一个函数,它返回一个名为tuple的
,其中包含大量计数器的结果——大约35个计数器(其中每个计数器代表某种功能的总和)

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

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

for my_object in my_objects:
     var1 += my_object.getVar1()
     # etc
     return MyFeatures(var1 = var1, var2 = var2, ...)
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, ...)
这看起来相当混乱,部分原因是
var1,var2,…=(0,)*35
占用了很多行

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

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

for my_object in my_objects:
     var1 += my_object.getVar1()
     # etc
     return MyFeatures(var1 = var1, var2 = var2, ...)
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次可能比上一版本中的初始化块更糟糕


你有什么建议吗?初始化一大组计数器是否有某种最佳做法?是否有一种pythonic方法来增加尚未初始化的变量?

您可以将所有计数器放入一个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}

为什么不使用一个计数器的列表或目录呢?让一堆变量的名称只在一个数字上有所不同永远都不是正确的答案。你需要一个列表:
vars=[0]*35
-并增加该列表的元素:
vars[无论什么]+=1
@jasonharper——我应该澄清一下,实际的名称不是
var1
var2
,等等。它们是像“aaind\u molecular\u volume\u sum”,“oh\u rxn\u constant\u sum”这样的东西。@thierrylahuille这可能是正确的方法。我最初坚持这一点的原因是因为return语句:
returnmyfeatures(var1=my_values['var1'])
对于35个项目来说似乎冗长/混乱。但是,现在想想——可能我不需要使用NamedTuple,只需要返回
myu值
字典。NamedTuple的好处在于它确保了我的返回值具有我所期望的特性,但是我可以在以后使用单元测试来实现这一点。是的。我提供了标准副本,其中包括蒂埃里的答案。根据定义,Python变量没有默认值,特别是为了避免我们大多数人遇到的无数调试情况。如果您想要一个默认值,那么您需要使用一些专门提供它作为Python默认值的覆盖的东西——例如
defaultdict