笔记-python-lib—data types-enum
笔记-python-lib—data types-enum
1. enum
Source code: Lib/enum.py
文档:https://docs.python.org/3/library/enum.html#using-auto
枚举类型enum是比较重要的一个数据类型,它是一种数据类型而不是数据结构,我们通常将一组常用的常数声明成枚举类型方便后续的使用。当一个变量有几种可能的取值的时候,我们将它定义为枚举类型。
1.1. Module Contents
This module defines four enumeration classes that can be used to define unique sets of names and values: Enum, IntEnum, Flag, and IntFlag. It also defines one decorator, unique(), and one helper, auto.
class enum.Enum
Base class for creating enumerated constants. See section Functional API for an alternate construction syntax.
基础类的枚举类,最常用。
class enum.IntEnum
Base class for creating enumerated constants that are also subclasses of int.
class enum.IntFlag
Base class for creating enumerated constants that can be combined using the bitwise operators without losing their IntFlag membership. IntFlag members are also subclasses of int.
class enum.Flag
Base class for creating enumerated constants that can be combined using the bitwise operations without losing their Flag membership.
enum.unique()
Enum class decorator that ensures only one name is bound to any one value.
装饰器,用于保证枚举类中属性值的唯一性;
class enum.auto
Instances are replaced with an appropriate value for Enum members.
1.2. 基础使用
创建enum类
class Gender(Enum):
a = 1
b = 2
c = 3
d = 4
e = 5
pr_type(Gender)
pr_type(Gender(1))
pr_type(Gender.b)
<enum 'Gender'> <class
'enum.EnumMeta'>
Gender.a <enum 'Gender'>
Gender.b <enum 'Gender'>
Gender就是一个类,它的类型是enum.EnumMeta
<enum 'Gender'>are enumeration
members (or enum members) and are functionally constants.是enum members,也叫功能常数
可以通过Gender.a或者Gender(1)或Gender[‘a’]引用属性
每个枚举类有两个属性:name,value,对应的是类变量中的属性名和值。
使用构造方法创建类:
from string import ascii_lowercase
ex1 = Enum('ex', (list(ascii_lowercase)))
pr_type(ex1)
print(ex1(3).__repr__())
结果:
<enum 'ex'> <class
'enum.EnumMeta'>
<ex.c: 3>
使用Enum()函数(就是Enum的构造方法)创建枚举类,该构造方法的第一个参数是枚举类的类名;第二个参数是一个元组,用于列出所有枚举值,也可以是可迭代对象;
本例中未给出枚举类的值,这时它会默认从1开始自增。
1.3.
属性重复
枚举类的enum members不能重复
class S(Enum):
sq = 2
sw = 3
sq = 4
s = S
报错:
TypeError: Attempted to reuse key: 'sq'
但值可以重复:
class S(Enum):
sq = 2
sw = 3
#sq = 4
sr = 3
s = S
没有报错。
如果不允许值重复,enum有一个装饰器unique:
@enum.unique
class S(Enum):
sq = 2
sw = 3
#sq = 4
sr = 3
s = S
这里产生抛出了一个异常:
ValueError: duplicate values found in
<enum 'S'>: sr -> sw
1.4.
其它操作
案例对象:
class Shape(Enum):
SQUARE = 2
DIAMOND = 1
CIRCLE = 3
ALIAS_FOR_SQUARE = 2
1.4.1.
iteration
>>> list(Shape)
[<Shape.SQUARE: 2>,
<Shape.DIAMOND: 1>, <Shape.CIRCLE: 3>]
The special attribute __members__ is
an ordered dictionary mapping names to members. It includes all names defined
in the enumeration, including the aliases:
>>>
for name, member in Shape.__members__.items():
... name, member
1.4.2.
planet
枚举类也可能自定义构造和生成方式,下面是一个简单的演示:
If __new__() or __init__() is
defined the value of the enum member will be passed to those methods:
>>>
class Planet(Enum):
... MERCURY = (3.303e+23, 2.4397e6)
... VENUS = (4.869e+24, 6.0518e6)
... EARTH = (5.976e+24, 6.37814e6)
... MARS = (6.421e+23, 3.3972e6)
... JUPITER = (1.9e+27, 7.1492e7)
... SATURN = (5.688e+26, 6.0268e7)
... URANUS = (8.686e+25, 2.5559e7)
... NEPTUNE = (1.024e+26, 2.4746e7)
... def __init__(self, mass, radius):
... self.mass = mass # in kilograms
... self.radius = radius # in meters
... @property
... def surface_gravity(self):
... # universal gravitational constant (m3 kg-1 s-2)
... G = 6.67300E-11
... return G * self.mass / (self.radius * self.radius)
...
>>>
Planet.EARTH.value
(5.976e+24,
6378140.0)
>>>
Planet.EARTH.surface_gravity
9.802652743337129
笔记-python-lib—data types-enum的更多相关文章
- Python - 2. Built-in Collection Data Types
From: http://interactivepython.org/courselib/static/pythonds/Introduction/GettingStartedwithData.htm ...
- Python - 1. Built-in Atomic Data Types
From:http://interactivepython.org/courselib/static/pythonds/Introduction/GettingStartedwithData.html ...
- 高性能MySQL笔记-第4章Optimizing Schema and Data Types
1.Good schema design is pretty universal, but of course MySQL has special implementation details to ...
- ExtJS笔记 Ext.data.Types
This is a static class containing the system-supplied data types which may be given to a Field. Type ...
- Data Types in the Kernel <LDD3 学习笔记>
Data Types in the Kernel Use of Standard C Types /* * datasize.c -- print the size of common data it ...
- 数据分析---《Python for Data Analysis》学习笔记【04】
<Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
- 数据分析---《Python for Data Analysis》学习笔记【03】
<Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
- 数据分析---《Python for Data Analysis》学习笔记【02】
<Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
- 数据分析---《Python for Data Analysis》学习笔记【01】
<Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...
- 学习笔记之Python for Data Analysis
Python for Data Analysis, 2nd Edition https://www.safaribooksonline.com/library/view/python-for-data ...
随机推荐
- Jmeter 测试结果分析之聚合报告简介
聚合报告(aggregate report) 对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量. 吞吐量是以取样目标点 ...
- JavaScript对象,函数,作用域
JavaScript对象 在 JavaScript中,几乎所有的事物都是对象.JavaScript 对象是拥有属性和方法的数据. var car = {type:"Fiat", m ...
- Intellij Idea2019版本激活,目前可以激活到2089,解决失效问题(非商业用途)
目录 Intellij Idea2019版本激活,目测可以激活到2089!! 前言-此教程仅用作个人学习,请勿用于商业获利,造成后果自负!!! 步骤(直接激活新下载的) 成功 注意(不想重新下载的小伙 ...
- AngularJS请求数据提示resource from url not allowed by $sceDelegate policy
AngularJS iframe跨域打开内容时报错 解决方案 使用 $sceDelegateProvider 配置跨域请求域名 config.js app.config(function($sce ...
- Plastic Bottle Manufacturer: Characteristic Analysis Of Plastic Packaging Bottles
Plastic packaging bottles are usually made of 7 materials. Due to its inherent characteristics, the ...
- 20180923-WebService
什么是webservice? 什么是远程调用技术?答:系统和系统之间的调用,从远程系统当中获取业务数据. Webservice是web服务,他是用http传输SOAP协议数据的一种远程调用 ...
- dropLoad.js移动端分页----Vue数据每次清空累加
dropLoad.js移动端使用 1.需要引入 dropload 必要的两个文件dropload.css .dropload.min.js 此案例在vue项目中使用过程: var vm = ne ...
- 洛谷 P1843 奶牛晒衣服(二分答案)
嗯... 题目链接:https://www.luogu.com.cn/problem/P1843 我们二分枚举时间,看看那些衣服在蒸发后还要用烘干机,则用cnt记录它的时间. 注意w数组在操作中不能变 ...
- Kosaraju's algorithm
推荐到我的这篇博客中看完整版的. 该算法用于求解有向图的强连通分量,也就是强连通子图的个数. 算法实现摘自Kosaraju's algorithm - 百度百科: #include <iostr ...
- Vue.nextTick DOM 更新循环结束之后执行延迟回调
在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 简单来说,Vue 在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统 ...