在python 2.7中,将整数值转换为具有该值的模块范围常量的名称的最佳/最简单/最“pythonic”方法是什么?
如果有办法将搜索变量名称的范围扩展为以魔术前缀开头的那些,那么
奖励积分。
换句话说:
EVT_FOO =0x0001
EVT_BAR =0x0002
EVT_SPAM=0x0004
EVT_EGGS=0x0008
def getEvtName( val ):
""" This should return 'EVT_FOO' when given the number 0x1 """
pass
我知道我可以创建一个字典来进行反向查找,但我想在Python中有更好的方法。建议?
答案 0 :(得分:1)
如果是全局对象,您可以使用globals()
函数获取名称:
>>> EVT_FOO =0x0001
>>> EVT_BAR =0x0002
>>> EVT_SPAM=0x0004
>>> EVT_EGGS=0x0008
>>>
>>> def getEvtName( val ):
... return next((i for i,j in globals().iteritems() if j==val and i.startswith(something)),None)
...
>>> getEvtName(0x0001)
'EVT_FOO'