Maison > développement back-end > Tutoriel Python > Comment puis-je utiliser et représenter efficacement les énumérations en Python ?

Comment puis-je utiliser et représenter efficacement les énumérations en Python ?

Susan Sarandon
Libérer: 2024-12-25 00:23:10
original
845 Les gens l'ont consulté

How Can I Effectively Use and Represent Enums in Python?

Représentation Python Enum

Python fournit un type Enum natif dans la version 3.4 et supérieure. Pour les versions antérieures, vous pouvez utiliser des bibliothèques tierces comme enum34 ou aenum.

Utilisation d'enum34 ou stdlib Enum :

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

Animal.ant  # <Animal.ant: 1>
Animal['ant']  # <Animal.ant: 1> (string lookup)
Animal.ant.name  # 'ant' (inverse lookup)
Copier après la connexion

Utilisation d'aenum :

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

Animal.ant  # same as enum34
Animal['ant']  # same as enum34
Animal.ant.name  # same as enum34
Copier après la connexion

Utilisation d'une version antérieure de Python Versions :

Pour les versions antérieures de Python, vous pouvez utiliser une fonction personnalisée comme celle-ci :

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

Numbers = enum(ONE=1, TWO=2, THREE='three')
Numbers.ONE  # 1
Numbers.TWO  # 2
Numbers.THREE  # 'three'
Copier après la connexion

Énumération automatique :

Vous peut également utiliser la fonction suivante pour l'énumération automatique :

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
Copier après la connexion

Inverser Mappage :

Pour prendre en charge la conversion des valeurs d'énumération en noms :

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)

Numbers = enum('ZERO', 'ONE', 'TWO')
Numbers.reverse_mapping['1']  # 'ONE'
Copier après la connexion

Typing.Literal (MyPy) :

Dans MyPy , vous pouvez définir des énumérations en utilisant Literal :

from typing import Literal

Animal = Literal['ant', 'bee', 'cat', 'dog']

def hello_animal(animal: Animal):
    print(f"hello {animal}")
Copier après la connexion

Cela empêchera les affectations de valeurs non énumérées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal