在Python里如何用枚举类型?
1
  • openoker 回复

    PEP435标准里已经把枚举添加到Python3.4版本,在Pypi中也可以向后支持3.3, 3.2, 3.1, 2.7, 2.6, 2.5, 和 2.4版本.

    如果想向后兼容$ pip install enum34,如果下载enum(没有数字)将会是另一个版本.

    from enum import Enum
    Animal = Enum('Animal', 'ant bee cat dog')
    

    或者等价于:

    class Animals(Enum):
        ant = 1
        bee = 2
        cat = 3
        dog = 4
    

    在更早的版本,下面这种方法来完成枚举:

    def enum(**enums):
        return type('Enum', (), enums)
    

    像这样来用:

    >>> Numbers = enum(ONE=1, TWO=2, THREE='three')
    >>> Numbers.ONE
    1
    >>> Numbers.TWO
    2
    >>> Numbers.THREE
    'three'
    

    也很容易支持自动计数,像下面这样:

    def enum(*sequential, **named):
        enums = dict(zip(sequential, range(len(sequential))), **named)
        return type('Enum', (), enums)
    

    这样用:

    >>> Numbers = enum('ZERO', 'ONE', 'TWO')
    >>> Numbers.ZERO
    0
    >>> Numbers.ONE
    1
    

    如果要把值转换为名字可以加入下面的方法:

    def enum(*sequential, **named):
        enums = dict(zip(sequential, range(len(sequential))), **named)
        reverse = dict((value, key) for key, value in enums.iteritems())
        enums['reverse_mapping'] = reverse
        return type('Enum', (), enums)
    

    这样会覆盖名字下的所有东西,但是对于枚举的输出很有用.如果转换的值不存在就会抛出KeyError异常.用前面的例子:

    >>> Numbers.reverse_mapping['three']
    'THREE'
    

公告

AI千集是一个智能写作平台
在这里您可以获得本平台自训练的
LLM模型服务
和小伙伴一起玩转AI,做自己的AI机器人
来AI千集,写作快人一步
扫一扫,加入我们
公众号
有加群需求的小伙伴,请微信加qianji_ai

千集助理是连通AI学研和就业的桥梁
登陆小程序
获取文案智能写作能力
工作效率瞬间提升

千集助理

积分排行