枚举是在python中比较冷门的知识点,就像学校里那种低调又不惹眼的学生,参加任何活动总是不能第一时间想到他们。但是这不代表他们没有能力,不能独当一面,恰恰相反,某些场合他们会发挥让人意想不到的能量。今天讲的就是 枚举 在python开发中的绝对领域,在这个场景设计下应该没有比它更合适的了。
一、什么是枚举
基础写法
既然说到 枚举,我们不能不认识它,首先要了解它,下面就是 枚举 在python中的基础用法。
from enum import Enum
class Color(Enum):
RED = 1
YELLOW = 2
BLUE = 3
# Color.RED
print(Color.RED)枚举 在其他语言中,基本都是可以直接书写,但在python必须 导入enum模块 才可以使用,这也是它在python中被冷遇的一个重要原因。
获取枚举值
可以看到,当我们 print(Color.RED) 时,输出的内容是与 枚举相对应,但其实它也代表了我们定义的 数字1。
# 1
print(Color.RED.value)在其他语言中,枚举的值可以直接代表 相对应的值,但在python中,我们获取值必须使用 Color.RED.value 的方式。
自动设置值
枚举 中的值其实可以自动设置,并非必须要设定:
from enum import Enum, auto
class Color(Enum):
RED = auto()
YELLOW = auto()
BLUE = auto()
# 1
print(Color.RED.value)
# 2
print(Color.YELLOW.value)使用了 auto(),枚举的值将自动递增,非常方便。
以上就是 枚举 的基本信息了,了解这些知识就足够应付绝大部分场景,接下来我们就看看枚举的绝对领域是什么?
二、枚举的绝对领域
接下来就是 枚举 的实战场景了,除了 枚举 还真没什么比它更合适的了。
我们现在有一笔购物订单,它有 九个 状态分别是:
1. 已创建
2. 待支付
3. 已支付
4. 已接单
5. 已发货
6. 已送达
7. 已完成
8. 已取消
9. 已退款
这么多状态我们该怎么接收呢,可以用什么类型呢?
用数字整型
很多人会想到第一种方式就是数字整型,用 九个数字 不就可以代表了,现在我们用 0~8 依次代表上面九个状态,那么请问下面这个状态代表什么:
order_status = 5你能立刻通过数字获悉当前状态吗?这恐怕需要废点功夫,因此数字并不是最合适的选择。
用字符串
那我们现在直接用字符串来代表不也很合适,现在我们用下面的对应关系:
状态 字符串
已创建 Created
待支付 PaymentPending
已支付 Paid
已接单 OrderTaking
已发货 Shipped
... ...
很好,现在每个订单状态和字符串一一对应,这总能一眼认出吧。但是现在问题是,字符串并没有 智能提示 功能,如果手打单词有可能出现错误:
order_status = 'Create'由于我们 单词拼写与设定的不一致,由此导致订单判断失败,所以字符串也不合适。
用枚举
所以现在就是我们枚举上场的时候了,它就能同时解决上面两个类型带来的问题。
from enum import Enum, auto
class OrderStatus(Enum):
CREATED = auto()
PAYMENT_PENDING = auto()
PAID = auto()
ORDER_TAKING = auto()
SHIPPED = auto()
...使用枚举时,不仅能够直接 通词达意,而且最重要的是可以 代码智能提示,因此在大部分情况下不会出现 输入单词出错 的问题。
在使用 枚举 时习惯用 全部大写+下划线 来设计。
三、总结
在python中,各种语法,关键字都不是平白无故设计的,每一个都有它特定的使用场景,即使你平常不使用它,但到特定开发场景下,总有它的一席之地。
更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!