Python的高级语法与用法 !

作者: 14e61d025165 | 来源:发表于2019-05-02 15:02 被阅读0次

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

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

    模块中的全局变量

    yellow =1
    green = 2

    字典

    {'yellow':1,'green':2}

    类的对象

    class TypeDiamond():
    yellow = 1
    green = 2

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

    (1)变量的值是可变的

    {'yellow':1,'green':2}
    a['yellow']=3

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

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

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

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

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

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

    from enum import Enum
    class VIP(Enum): #继承
    YELLOW = 1
    YELLOW = 1
    GREEN = 2
    BLACK = 3
    RED = 4
    print(VIP.YELLOW)

    TypeError: Attempted to reuse key: 'YELLOW'

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

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

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

    VIP.YELLOW

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

    枚举的操作

    (1)获取数值

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

    from enum import Enum
    class VIP(Enum):
    YELLOW = 1
    GREEN = 2
    BLACK = 3
    RED = 4
    print(VIP(1))
    print(VIP['YELLOW'])

    VIP.YELLOW
    VIP.YELLOW

    (2)获取标签的名字

    具体方法如下面代码所示

    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'])

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

    print(type(VIP.GREEN.name)) #字符串
    print(type(VIP.GREEN)) #枚举名字
    print(type(VIP['GREEN'])) #枚举的值

    <class 'str'>
    <enum 'VIP'>
    <enum 'VIP'>

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

    (3)枚举的遍历

    from enum import Enum
    class VIP(Enum):
    YELLOW = 1
    GREEN = 2
    BLACK = 3
    RED = 4
    for v in VIP:
    print(v)

    VIP.YELLOW
    VIP.GREEN
    VIP.BLACK
    VIP.RED

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

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

    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)

    ('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同一性比较或==等值比较

    from enum import Enum
    class VIP(Enum):
    YELLOW = 1
    GREEN = 2
    BLACK = 3
    RED = 4
    result = VIP.GREEN == VIP.BLACK
    print(result)

    False

    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)

    True

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

    from enum import Enum
    class VIP(Enum):
    YELLOW = 1
    GREEN = 2
    BLACK = 3
    RED = 4
    result2 = VIP.GREEN > VIP.BLACK
    print(result2)

    '>' not supported between instances of 'VIP' and 'VIP'

    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)

    False

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

    相关文章

      网友评论

        本文标题:Python的高级语法与用法 !

        本文链接:https://www.haomeiwen.com/subject/atpnnqtx.html