生成具有连续值的变量

时间:2019-06-11 16:05:01

标签: python enums

我正在处理具有很多列的表。  为了不得到幻数,我编写了类似的代码

colName, colID, colDesc = 1, 2, 3

当我想添加新项目时,它变成

#        vvvvvvvv                           v
colName, colAddr, colID, colDesc = 1, 2 ,3, 4

我在需要的地方添加colAddr,并在末尾添加4。这适用于4个变量,但大约有20-30个变量,我得到的代码行很长。

所以我把它们分开了:每行一行

colName = 1
colID = 2
colDesc = 3

如果我想在Name和ID之间添加一些内容,则必须对变量进行重新编号,这确实很麻烦

colName = 1
colAddr = 2
colID = 3 # renumbered
colDesc = 4 # renumbered

我可能不得不经常在它们之间添加列-表格设计仍然很流畅,所以我想到了类似的东西

col = 0
col, colName = col + 1, col
col, colID = col + 1, col
col, colDesc = col + 1, col

如果我想添加colAddr,那将只是一行更改

col = 0
col, colName = col + 1, col
col, colAddr = col + 1, col # new line of code
col, colID = col + 1, col
col, colDesc = col + 1, col

这有效,但看起来很乱。有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

如果使用a,b,c=range(3),则可以在开头添加任意数量的变量,并更改范围值以匹配变量的数量。

如果编号需要从1开始,请使用range(1,4)

答案 1 :(得分:3)

比@depperm建议的解决方案更优雅的解决方案是使用enum模块(从Python v。3.4开始可用),例如:

from enum import Enum
class MyEnum (Enum):
    col, colName, colAddr, colID, colDesc = range(5)

然后按以下方式使用它:

MyEnum.col
MyEnum.colName
...

您当然可以为每个变量使用非连续值。

答案 2 :(得分:3)

您可以使用collections.namedtuple

from collections import namedtuple

t = namedtuple('columns', 'colName, colAddr, colID, colDesc')
cols = t._make(range(len(t._fields)))

print(cols)
print(cols.colName)
print(cols.colAddr)
print(cols.colID)
print(cols.colDesc)

打印:

columns(colName=0, colAddr=1, colID=2, colDesc=3)
0
1
2
3