Python中如何从包含多个值的IntFlag枚举获取字符串数组?
解决方案
直接通过枚举类成员校验的方式实现,完全不需要做字符串截取/拆分操作,鲁棒性更高,示例代码如下:
from enum import IntFlag class BitShift(IntFlag): Bit8 = 0x80 Bit7 = 0x40 Bit6 = 0x20 Bit5 = 0x10 Bit4 = 0x8 Bit3 = 0x4 Bit2 = 0x2 Bit1 = 0x1 bitshiftval = BitShift(0x84) # 核心转换逻辑 res = [member.name for member in BitShift if member in bitshiftval] print(res)
运行后直接输出你需要的结果:['Bit8', 'Bit3']
方案说明
- 该方法兼容所有支持
IntFlag的Python版本(Python 3.6及以上),无需依赖高版本新特性 - 逻辑原理是遍历枚举类的所有单值成员,校验该成员是否被包含在当前多值组合的IntFlag实例中,匹配成功则取成员的
name属性(即成员名称字符串)加入结果数组 - 相比字符串拆分的方法,不会受枚举类名变更、成员名含特殊字符的影响,稳定性和性能都更优
- 如果你使用Python 3.11及以上版本,还可以直接迭代IntFlag实例,写法更简洁:
res = [m.name for m in bitshiftval]
内容的提问来源于stack exchange,提问作者Peter Lambrechtsen
相关产品推荐
相关产品推荐

