前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python的高级语法与用法

Python的高级语法与用法

作者头像
stormwen
发布2019-08-05 10:34:27
4280
发布2019-08-05 10:34:27
举报
文章被收录于专栏:公众号:googpy公众号:googpy

Python是一种易于学习又功能强大的编程语言。它不仅有简单有效的面向对象编程,还有高效的高级数据结构,就让我们一起来学习这部分的内容吧。

Python的原生类型中并不包含枚举类型,在Python3之前数据类型的表示方式有三种

模块中的全局变量

代码语言:javascript
复制
yellow =1
green = 2

字典

代码语言:javascript
复制
{'yellow':1,'green':2}

类的对象

代码语言:javascript
复制
class TypeDiamond():
    yellow = 1
    green  = 2

但是以上三种方法使用时存在缺点:

(1)变量的值是可变的

代码语言:javascript
复制
{'yellow':1,'green':2}  

 a['yellow']=3

(2)没有防止相同标签的功能

为了消除上述缺点,提供更好的解决方案, Python通过PEP435在3.4版本中添加了enum标准库,从而引入了枚举类型。

枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,比如星期、月份、状态等。

用一个具体实例说明枚举类型。QQ的VIP有黄钻、绿钻、黑钻和红钻,下面编写代码将VIP种类分别对应一个数值

代码语言:javascript
复制
from enum import Enum

class VIP(Enum):          
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4

在上面代码中,我们将钻石的种类用大写字母表示,说明枚举类型中的变量是不可变的,其次不能出现相同的标签,否则就会出现

代码语言:javascript
复制
from enum import Enum

class VIP(Enum):           #继承
    YELLOW = 1
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4

print(VIP.YELLOW)
代码语言:javascript
复制
TypeError: Attempted to reuse key: 'YELLOW'

上面例子可以说明枚举类型不可实例化,不可更改。

如果枚举类型的标签名不同,但值相同,会出现只打印第一个标签

代码语言:javascript
复制
from enum import Enum

class VIP(Enum):           #继承
    YELLOW = 1
    GREEN  = 1
    BLACK  = 3
    RED    = 4

print(VIP(1))
代码语言:javascript
复制
VIP.YELLOW

因此,我们把第二个具有相同值的标签称为第一个标签的别名。

枚举的操作

(1)获取数值

可以通过成员名来获取成员也可以通过成员值来获取成员

代码语言:javascript
复制
from enum import Enum

class VIP(Enum):           
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4

print(VIP(1))
print(VIP['YELLOW'])
代码语言:javascript
复制
VIP.YELLOW
VIP.YELLOW

(2)获取标签的名字

具体方法如下面代码所示

代码语言:javascript
复制
from enum import Enum

class VIP(Enum):
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4

print(VIP.GREEN.name)         
print(VIP.GREEN)              
print(VIP['GREEN'])
代码语言:javascript
复制
GREEN
VIP.GREEN
VIP.GREEN

打印了三种不同的值,通过运用type()函数,可以直观地看出三种打印值属于不同的数据类型。

代码语言:javascript
复制
print(type(VIP.GREEN.name))        #字符串
print(type(VIP.GREEN))             #枚举名字
print(type(VIP['GREEN']))          #枚举的值
代码语言:javascript
复制
<class 'str'>              
<enum 'VIP'>
<enum 'VIP'>

第一个是字符串,第二个是枚举的名字,第三个是枚举的值。枚举的名字和枚举的值组成了枚举类型。

(3)枚举的遍历

代码语言:javascript
复制
from enum import Enum

class VIP(Enum):
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4

for v in VIP:
    print(v)
代码语言:javascript
复制
VIP.YELLOW
VIP.GREEN
VIP.BLACK
VIP.RED

如果有值重复的成员,只能获取重复的第一个成员。

将重复的成员叫做别名,当需要将别名遍历出来时,用Python的特殊属性_members__是一个将名称映射到成员的有序字典,通过它来完成遍历。

代码语言:javascript
复制
from enum import Enum

class VIP(Enum):         
    YELLOW = 1
    YELLOW_ALIAS = 2
    GREEN  = 2
    BLACK  = 3
    RED    = 4

for v in VIP.__members__.items():
    print(v)
代码语言:javascript
复制
('YELLOW', <VIP.YELLOW: 1>)
('YELLOW_ALIAS', <VIP.YELLOW_ALIAS: 2>)
('GREEN', <VIP.YELLOW_ALIAS: 2>)
('BLACK', <VIP.BLACK: 3>)
('RED', <VIP.RED: 4>)

枚举比较

(1)枚举成员可以通过is同一性比较或==等值比较

代码语言:javascript
复制
from enum import Enum

class VIP(Enum):
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4

result = VIP.GREEN == VIP.BLACK
print(result)
代码语言:javascript
复制
False
代码语言:javascript
复制
from enum import Enum

class VIP(Enum):
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4

class VIP1(Enum):           
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4

result3 = VIP.GREEN is VIP.GREEN
print(result3)
代码语言:javascript
复制
True

(2)枚举成员不能进行大小比较,不同类的枚举不能比较。

代码语言:javascript
复制
from enum import Enum

class VIP(Enum):
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4

result2 = VIP.GREEN > VIP.BLACK
print(result2)
代码语言:javascript
复制
'>' not supported between instances of 'VIP' and 'VIP'
代码语言:javascript
复制
from enum import Enum

class VIP(Enum):
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4

class VIP1(Enum):          
    YELLOW = 1
    GREEN  = 2
    BLACK  = 3
    RED    = 4
result4 = VIP.GREEN == VIP1.GREEN
print(result4)
代码语言:javascript
复制
False

既然已经意识到和牛人的差距,那么应该加倍努力,不止每一个放假的日子。平凡人的不平凡,是为梦想费尽力气,是无视荆棘一路前行。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 googpy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档