我正在处理具有很多列的表。 为了不得到幻数,我编写了类似的代码
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
这有效,但看起来很乱。有更好的方法吗?
答案 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