我正在寻找一种关联方式:
- 人类可读的标签:
“选项一”
甚至u'Première option'
- “常量名称”:
OPTION_ONE
- 整数值(从 0 开始)
鉴于:
- 代码将标签列表传递给某个 API,然后将其显示给用户
- API 返回一个整数值,该值是用户选择在上述序列中的索引
- 我想稍后将此整数值与常量名称之一(或从常量名称快速派生的名称)进行比较
- 我希望能够轻松地在序列中插入/删除/重新排序标签
- 我不想对任何整数值进行硬编码(如果需要的话,
0
除外)。
当然这是为了让代码看起来干净,所以需要合理的简洁。这应该使用标准库在 Python 2.7 中运行。
最佳答案
使用命名元组的解决方案:
首先定义一个小函数
from collections import namedtuple def createOpts(name,pairs): # namedtuple('FooType',['OPTION1',...,'OPTIONn','labels'] optsclass=namedtuple(name+'Type',[symbol for symbol,label in pairs]+['labels']) # FooType(0,..,n-1,['Option 1',...,'Option N']) opts=optsclass(*(range(len(pairs))+[[label for symbol,label in pairs]])) return opts
选项定义如下的列表
Options=createOpts('Opt',[('OPTION1','Option one'),('OPTION2','Options two'),('OPTION3','Option three'),])
然后在代码中就这样使用。
print type(Options) print 'Option labels:',Options.labels print 'Option one:',Options.OPTION1 print 'Option two compares to 1:',1==Options.OPTION2 print 'Option 2 in set:', 1 in [Options.OPTION2,Options.OPTION3] print 'Option 1 not in set:', 0 not in [Options.OPTION2,Options.OPTION3] <class '__main__.OptType'> Option labels: ['Option one', 'Options two', 'Option three'] Option one: 0 Option two compares to 1: True Option 2 in set: True Option 1 not in set: True
关于Python:关联标签、常量名称和整数,无需硬编码值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51410366/