组合位标记

Kyu*_*u96 5 python flags

我有几个标志:

    None = 0
    HR = 1
    HD = 2,
    DT = 4,
    Fl = 8
..
Run Code Online (Sandbox Code Playgroud)

等等

我想创建一个输入特定标志的函数,可以这样说:6。

返回值应为HDDT,因为2 | 4 =6。也可能会组合3个或更多标志或仅一个标志。例如:7 = 1 | 2 | 4 => HRHDDT。

如何根据标志值返回缩进的字符串?

在我的情况下,枚举还有很多条目,这会使if语句真的很不舒服,因为我必须涵盖数百种情况。

有什么聪明的解决方案吗?

Bil*_*lly 1

您可以像这样存储标志dict

flags = {1:'HR', 2:'HD', 4:'DT', 8:'FL'}
Run Code Online (Sandbox Code Playgroud)

并按位and您的数字与标志来检索字符串:

def get_flags(num):
    if num:
        return ''.join(flags[x] for x in flags if x & num)
    return None

>>> get_flags(6)
'HDDT'
Run Code Online (Sandbox Code Playgroud)