快速掌握Python枚举教程

Python3.4版本引入新的数据类型——枚举,本文带你学习完整的枚举类型。

枚举概述

枚举是一组绑定唯一常量值的符号名称。枚举用于场景简单的自定义类型,如季节、星期、游戏中的武器类型等,枚举命名一般约定为大写字母开头,且为单数形式。

Python中使用enum模块创建枚举,通过class关键字或函数方式创建枚举。enum有几个派生类,IntEnum,enum.IntFlag,enum.Flag。

简单枚举示例

首先我们看个简单示例:

from enum import Enum

# 继承自基类Enum
class Season(Enum):
    SPRING = 1
    SUMMER = 2
    AUTUMN = 3
    WINTER = 4

# 访问成员
seas = Season.SPRING
print(seas)

# 枚举值比较
if seas == Season.SPRING:
    print("Spring")

# 通过list可以访问枚举所有可能的值
print(list(Season))

上面示例我们定义Season枚举,包括四个值。通过枚举名称+点+成员名称来访问成员。

输出结果:

Season.SPRING
Spring
[<Season.SPRING: 1>, <Season.SUMMER: 2>, <Season.AUTUMN: 3>, <Season.WINTER: 4>]

第二个示例

我们再看一个实例,其中使用了枚举相关的基本函数。

from enum import Enum


class Season(Enum):
    SPRING = 1
    SUMMER = 2
    AUTUMN = 3
    WINTER = 4


seas = Season.SPRING

# 以人可读的字符串形式输出枚举值
print(seas)

# isinstance方法检测变量释放为Season类型
print(isinstance(seas, Season))

# type函数输出变量类型
print(type(seas))

# repr函数输出枚举的更多信息
print(repr(seas))

# 可以通过成员名称或索引访问枚举成员
print(Season['SPRING'])
print(Season(1))

输出结果:

Season.SPRING
True
<enum 'Season'>
<Season.SPRING: 1>
Season.SPRING
Season.SPRING

通过函数API方式创建枚举

Python枚举也可以通过API方式创建。

from enum import Enum

# 有多种方式指定枚举项,这里使用字符串
# 通过Enum函数创建枚举,通过字符串指定枚举项,start表示从1开始
Season = Enum('Season', 'SPRING SUMMER AUTUMN WINTER', start=1)

seas = Season.SUMMER
print(seas)

if seas == Season.SUMMER:
    print("Summer")

输出结果:

Season.SUMMER
Summer

迭代枚举

下面示例展示如何迭代枚举:

from enum import Enum

# 通过字符串列表创建枚举
Season = Enum('Season', ['SPRING', 'SUMMER', 'AUTUMN', 'WINTER'], start=5)

for season in Season:
    print(season)

# 迭代枚举名称和值
for season in Season:
    print(season.name, season.value)

输出结果:

Season.SPRING
Season.SUMMER
Season.AUTUMN
Season.WINTER
SPRING 5
SUMMER 6
AUTUMN 7
WINTER 8

自动赋值

Python枚举可以通过auto函数自动赋值:

from enum import Enum
from enum import auto

# auto函数自动赋值
class Season(Enum):
    SPRING = 1
    SUMMER = auto()
    AUTUMN = auto()
    WINTER = auto()


for season in Season:
    print(season.value)

输出结果:

1
2
3
4

枚举成员值的唯一性

枚举的成员值可以通过@unique装饰器确保其唯一性:

from enum import Enum, unique

@unique
class Season(Enum):
    SPRING = 1
    SUMMER = 2
    AUTUMN = 3
    WINTER = 3


for season in Season:
    print(season)

运行报错:ValueError: duplicate values found in <enum ‘Season’>: WINTER -> AUTUMN

如果注释掉装饰器行,则会正确输出,但重复的WINTER被忽略了。

Season.SPRING
Season.SUMMER
Season.AUTUMN

枚举的成员 __members__

from enum import Enum

# 通过字典方式定义枚举
Season = Enum('Season', [('SPRING', 1), ('SUMMER', 2), 
    ('AUTUMN', 3), ('WINTER', 4)])


# 通过__member__成员遍历枚举成员的名称
for name, member in Season.__members__.items():
    print(name, member)

输出结果:

SPRING Season.SPRING
SUMMER Season.SUMMER
AUTUMN Season.AUTUMN
WINTER Season.WINTER

enum.Flag类型

enum.Flag是用于创建二进制位形式枚举。


from enum import Flag, auto


# 继承自Flag
class Perm(Flag):
    EXECUTE = auto()
    WRITE = auto()
    READ = auto()


# 打印枚举成员
print(list(Perm))


# 通过或运算组合功能,实现授权
rw = Perm.READ | Perm.WRITE
print(rw)

# 提供与运算判断是否有该枚举成员,实现鉴权
if rw & Perm.READ:
    print("Allowed to read.")
else:
    print("Not allowed to read.")

if rw & Perm.EXECUTE :
    print("Allowed to execute.")
else:
    print("Not allowed to execute.")

输出结果:

[<Perm.EXECUTE: 1>, <Perm.WRITE: 2>, <Perm.READ: 4>]
Perm.READ|WRITE
Allowed to read.
Not allowed to execute.
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
快速掌握Python编程语言,可以按照以下步骤进行: 1. 学习基本语法:了解Python的基本语法和常用数据类型,如变量、条件语句、循环、列表、字典等。可以通过在线教程、官方文档或书籍来学习。 2. 实践编程:通过实际编写代码来提升熟练度和理解能力。尝试解决一些简单的编程问题,编写小程序或脚本。也可以参与开源项目或参加编程比赛来锻炼自己。 3. 使用Python库和框架:Python拥有丰富的第三方库和框架,可以加速开发过程。学习并使用常用的库,如NumPy(科学计算)、Pandas(数据分析)、Matplotlib(数据可视化)等,以及流行的Web框架如Django或Flask。 4. 阅读源代码和文档:学习他人编写的Python代码可以提供很多启发和实践经验。阅读开源项目的源代码和相关文档,理解其设计思想和实现方式。 5. 参与社区和交流:积极参与Python社区,与其他开发者交流经验和解决问题。参加本地或在线的Python用户组、论坛、聚会等,分享和学习最新的Python技术。 6. 持续学习和实践:Python是一门广泛应用于多个领域的编程语言,它不断发展和更新。持续学习新的特性、库和最佳实践,并将其应用到实际项目中。 此外,坚持编程练习、Google搜索和阅读相关书籍也是快速掌握Python的关键。要记住,编程是一种实践和经验积累的过程,不断地动手实践才能更好地掌握Python。 祝您学习Python的过程顺利!如果您有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值