zoukankan      html  css  js  c++  java
  • python枚举的应用enum

    一、介绍

    枚举类可以方便地表示星期,月份等常数类型,如果你不用枚举类,那么你只能用数字或者字符串。如果你使用数字,用1-7来表示星期数,但一个数字在程序中不仅可以表示星期数,可能还有其他许多含义,这样你在写程序时就必须时刻记住这些数字的含义,这降低了程序的可读性,也导致容易出错。而当你使用字符串时,虽然没有明显的缺点,但在内存中字符串所占内存要比数字多,这就降低了程序的效率。

    枚举类正好弥补了这两方面的缺点,你可以在代码中使用枚举类,但在内存中存放时使用的是数字,既提高了可读性,又提高了程序效率。更重要的是,Python中的枚举类型是不可变类型,又可以进行迭代,这就意味着你可以随时使用枚举类型而不用担心改变了枚举类型的值

    二、代码

    from enum import Enum, unique
    
    #@unique #@unique装饰器可以帮助我们检查保证没有重复值
    class Weekday(Enum):
        Sun = 0 # Sun的value被设定为0
        Mon = 1
        Tue = 2
        Wed = 3
        Thu = 4
        Fri = 5
        Sat = 6
        Say = 6 #假设重复项
    
    print(Weekday.Sun) #枚举类型
    print(Weekday['Sun']) #枚举类型
    print(Weekday.Sun.name) #枚举名称
    print(Weekday.Sun.value)  #枚举值
    print(Weekday(3)) #数字得到枚举类型
    
    # 遍历枚举,重复的不会打印
    for w in Weekday:
        print(w)
    
    # 遍历枚举,重复的会打印
    for name, member in Weekday.__members__.items():
        print( name, member )

    三、进阶用法

    from enum import Enum, unique
    
    
    @unique  # @unique装饰器可以帮助我们检查保证没有重复值
    class Weekday(Enum):
        def __new__(cls, english, chinese, day):
            obj = object.__new__(cls)
            obj.english = english
            obj.chinese = chinese
            obj.day = day
            return obj
    
        Sun = 'Sunday', '星期日', 0  # Sun的value被设定为0
        Mon = 'Monday', '星期一', 1
        Tue = 'Tuesday', '星期二', 2
        Wed = 'Wednesday', '星期三', 3
        Thu = 'Thursday', '星期四', 4
        Fri = 'Friday', '星期五', 5
        Sat = 'Saturday', '星期六', 6
    
    
    print(Weekday.Sun)  # 枚举类型
    print(Weekday['Sun'])  # 枚举类型
    print(Weekday.Sun.name)  # 枚举名称
    print(Weekday.Sun.value)  # 枚举值
    print(Weekday.Sun._value_)  # 也是枚举值
    print(Weekday.Sun.chinese)  # 自定义枚举中文名
    print(Weekday.Sun.english)  # 自定义枚举英文名
    
    print(Weekday(
        ('Wednesday', '星期三', 3)))  # 这里注意,按照源码中最后的判断,if value in cls._value2member_map_: value就是传入的值,
    # cls._value2member_map_就是包含__value__的一个字典,也就是枚举的3个值,是一个整体的元组
    
    
    @unique  # @unique装饰器可以帮助我们检查保证没有重复值
    class Weekday(Enum):
        def __new__(cls, english, chinese, day):
            obj = object.__new__(cls)
            obj.english = english
            obj.chinese = chinese
            obj._value_ = day  # 稍作修改
            return obj
    
        Sun = 'Sunday', '星期日', 0  # Sun的value被设定为0
        Mon = 'Monday', '星期一', 1
        Tue = 'Tuesday', '星期二', 2
        Wed = 'Wednesday', '星期三', 3
        Thu = 'Thursday', '星期四', 4
        Fri = 'Friday', '星期五', 5
        Sat = 'Saturday', '星期六', 6
    
    
    print(Weekday.Sun)  # 枚举类型
    print(Weekday['Sun'])  # 枚举类型
    print(Weekday.Sun.name)  # 枚举名称
    print(Weekday.Sun.value)  # 枚举值
    print(Weekday.Sun._value_)  # 也是枚举值
    print(Weekday.Sun.chinese)  # 自定义枚举中文名
    print(Weekday.Sun.english)  # 自定义枚举英文名
    print(Weekday(3)) #这样也可以判断了
  • 相关阅读:
    判断开始时间不能小于结束时间
    angular1.0使用echarts点刷新再次调用echarts方法
    解决angular4.0打包后不能再继续打包
    html拼接+layer按钮
    angular.js+echarts
    nginx配置
    NET_Framework_4.0installer.rar
    IIS6.0开启gzip压缩
    IIS的应用程序池优化方法
    远程桌面连接电脑后键盘失灵解决
  • 原文地址:https://www.cnblogs.com/angelyan/p/12214327.html
Copyright © 2011-2022 走看看