gpt4 book ai didi

python - 如何将字符串与python枚举进行比较?

转载 作者:IT老高 更新时间:2023-10-28 20:32:35 26 4
gpt4 key购买 nike

我刚刚发现 Enum 的存在python中的基类,我试图想象它对我有什么用处。

假设我定义了一个红绿灯状态:

from enum import Enum, auto

class Signal(Enum):
red = auto()
green = auto()
orange = auto()

假设我从程序中的某个子系统接收信息,以字符串的形式表示颜色名称,例如 brain_detected_colour = "red"

如何将此字符串与我的交通灯信号进行比较?

显然,brain_detected_colour is Signal.redFalse,因为 Signal.red 不是字符串。

Signal(brain_detected_colour) is Signal.red 失败并出现 ValueError: 'red' is not a valid Signal

最佳答案

一个人不会创建 instance of an Enum .Signal(foo) 语法用于按值访问 Enum 成员,当它们是 auto() 时不打算使用它们。

但是可以使用字符串到 access Enum members就像使用方括号访问 dict 中的值一样:

Signal[brain_detected_colour] is Signal.red

另一种可能性是将字符串与枚举成员的 name 进行比较:

# Bad practice:
brain_detected_colour is Signal.red.name

但在这里,我们不是在测试 Enum 成员之间的身份,而是比较字符串,所以使用相等测试是更好的做法:

# Better practice:
brain_detected_colour == Signal.red.name

(感谢 string interning,字符串之间的身份比较有效,最好不要依赖它。感谢@mwchase 和@Chris_Rands 让我意识到这一点。)

另一种可能性是在创建 Enum 时将成员值显式设置为其名称:

class Signal(Enum):
red = "red"
green = "green"
orange = "orange"

(请参阅 this answer 了解自动执行此操作的方法。)

那么,Signal(brain_detected_colour) is Signal.red 将是有效的。

关于python - 如何将字符串与python枚举进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44781681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com