zoukankan      html  css  js  c++  java
  • Python3基础系列——枚举类型大揭秘

    为什么使用枚举

    枚举类型是定义常量的一种最优选择。

    **常量**的广义概念是:**不变化的量** 对于**常量**的通俗比喻——**如同大山不被轻而易举地改变**
    地球上的重力加速度到海枯石烂也会改变
    人们使用的常量是时间不很漫长的那一段时期基本上不会改变的量
    真空状态中的光速是常量理论上不可改变,是常量
    

    看下图:采用直接定义、类定义、字典定义常量,均可以改变常量的值,达不到永恒不变的要求,另外没有防止相同类型的功能,也就是可以取同一个值,Monday = 1,Friday = 1。

    枚举类型的优势

    优势1:定义的量不可改变

    优势2:可以防止同一类型取相同的值

    枚举类型的使用

    • 枚举的类型
    • 枚举的name
    • 枚举的value
    from enum import Enum
    
    class week(Enum):
        Monday = 1
        Monday_alias = 1
        Tuesday = 2
        Wednesday = 3
        Thursday = 4
        Friday = 5
        Saturday = 6
        Sunday = 7
    print('----访问名字---')
    print(week.Monday_alias.name)
    print('----访问值---')
    print(week.Friday.value)
    print('----访问类型---')
    print(week['Saturday'])
    print(week.Friday)
    print('---循环所有类型简洁----')
    for w in week.__members__:
        print(w)
    print('----循环所有类型复杂---')
    for w in week.__members__.items():
        print(w)
    print('---循环不重复值的类型----')
    for w in week:
        print(w)
    

    结果

    ----访问名字---
    Monday
    ----访问值---
    5
    ----访问类型---
    week.Saturday
    week.Friday
    ---循环所有类型简洁----
    Monday
    Monday_alias
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    ----循环所有类型复杂---
    ('Monday', <week.Monday: 1>)
    ('Monday_alias', <week.Monday: 1>)
    ('Tuesday', <week.Tuesday: 2>)
    ('Wednesday', <week.Wednesday: 3>)
    ('Thursday', <week.Thursday: 4>)
    ('Friday', <week.Friday: 5>)
    ('Saturday', <week.Saturday: 6>)
    ('Sunday', <week.Sunday: 7>)
    ---循环不重复值的类型----
    week.Monday
    week.Tuesday
    week.Wednesday
    week.Thursday
    week.Friday
    week.Saturday
    week.Sunday
    

    枚举类型拓展

    定义方式1

    ```

    from enum import Enum

    week = Enum('week', ('Monday', 'Tuesday', 'Wednesday', 'Thursday',
    'Friday', 'Saturday', 'Sunday'))
    for name, member in week.members.items():
    print("名字{},=》,成员{},值{}".format(name, member, member.value))

    **结果**
    

    名字Monday,=》,成员week.Monday,值1
    名字Tuesday,=》,成员week.Tuesday,值2
    名字Wednesday,=》,成员week.Wednesday,值3
    名字Thursday,=》,成员week.Thursday,值4
    名字Friday,=》,成员week.Friday,值5
    名字Saturday,=》,成员week.Saturday,值6
    名字Sunday,=》,成员week.Sunday,值7

    <p style="border-style:solid;">定义方式2</p>
    
    

    from enum import Enum, unique

    @unique # @unique这个装饰器是帮我们检查是否有重复的值。
    class week(Enum):
    Monday = 1
    # Monday_alias = 1 如果有这个语句,程序运行出错
    Tuesday = 2
    Wednesday = 3
    Thursday = 4
    Friday = 5
    Saturday = 6
    Sunday = 7

    for name, member in week.members.items():
    print("名字{},=》,成员{},值{}".format(name, member, member.value))

    **结果**
    

    名字Monday,=》,成员week.Monday,值1
    名字Tuesday,=》,成员week.Tuesday,值2
    名字Wednesday,=》,成员week.Wednesday,值3
    名字Thursday,=》,成员week.Thursday,值4
    名字Friday,=》,成员week.Friday,值5
    名字Saturday,=》,成员week.Saturday,值6
    名字Sunday,=》,成员week.Sunday,值7

    
    <p style="border-style:solid;">相关知识之enumerate</p>
    
    ![](https://img2018.cnblogs.com/blog/1372901/201810/1372901-20181030093105922-100521343.jpg)
    
    
    
    
    enumerate()
    
    
        enumerate()是一个内置函数,不用导入
    
        enumerate可用for循环,enumerate将其组成一个索引序列,利用它可以同时获得索引和值
    
    
    **代码1**
    

    week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]
    for num, day in enumerate(week):
    print("索引:{},值:{}".format(num, day))

    **结果**
    

    索引:0,值:星期一
    索引:1,值:星期二
    索引:2,值:星期三
    索引:3,值:星期四
    索引:4,值:星期五
    索引:5,值:星期六
    索引:6,值:星期天

    ** 代码2**
    

    week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]
    for num, day in enumerate(week, 1): # 指定起始序号enumerate(week, 1)
    print("索引:{},值:{}".format(num, day))

    **结果**
    

    索引:1,值:星期一
    索引:2,值:星期二
    索引:3,值:星期三
    索引:4,值:星期四
    索引:5,值:星期五
    索引:6,值:星期六
    索引:7,值:星期天

  • 相关阅读:
    Java 学习总结(一)
    每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容
    每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询
    HighCharts使用心得
    ECharts使用心得总结(二)
    每日学习心得:Js基本数据类型常用方法扩展
    每日学习心得:$.extend()方法和(function($){...})(jQuery)详解
    Mustache 使用心得总结
    Extjs editor 设置默认值
    Ext this.getView(...).saveDocumentAs is not a function
  • 原文地址:https://www.cnblogs.com/brightyuxl/p/9874915.html
Copyright © 2011-2022 走看看