将模块中的数值转换为其变量名称

时间:2015-07-14 16:26:40

标签: python python-2.7

在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中有更好的方法。建议?

1 个答案:

答案 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'