Em [[Linguagem de programação Python|Python]], enumerações (enums) são uma forma de criar um conjunto de nomes simbólicos (membros) vinculados a valores únicos e constantes. Elas fornecem uma maneira clara e legível de representar um conjunto fixo de opções ou estados. Python oferece duas formas principais de trabalhar com enumerações: a função `enumerate()` e a classe `Enum` do módulo `enum`.
**1. Função `enumerate()`**
A função `enumerate()` é usada para iterar sobre uma sequência (como uma lista, tupla ou string) e obter tanto o índice quanto o valor de cada elemento. Ela não cria uma enumeração formal, mas é útil para numerar os elementos de uma sequência existente.
**Exemplo:**
```python
names = ["Alice", "Bob", "Charlie", "Debbie"]
for i, name in enumerate(names):
print(f"Name {i} is {name}")
```
**Saída:**
```
Name 0 is Alice
Name 1 is Bob
Name 2 is Charlie
Name 3 is Debbie
```
**Explicação:**
* `enumerate(names)`: Retorna um iterador que produz pares `(índice, valor)` para cada elemento da lista `names`.
* `for i, name in enumerate(names)`: Desempacota cada par em `i` (o índice) e `name` (o valor).
**2. Classe `Enum` (do módulo `enum`)**
A classe `Enum` do módulo `enum` permite criar enumerações formais, onde cada membro tem um nome e um valor associado. Isso oferece mais estrutura e segurança em comparação com o uso de constantes soltas.
**Exemplo:**
```python
from enum import Enum
# Sintaxe de classe
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# Sintaxe funcional
# Color = Enum('Color', ['RED', 'GREEN', 'BLUE']) #Não recomendada
print(Color.RED) # Output: Color.RED
print(Color.RED.value) # Output: 1
print(Color(1)) # Output: Color.RED
print(Color['RED']) # Output: Color.RED
for color in Color:
print(color)
```
**Saída:**
```
Color.RED
1
Color.RED
Color.RED
Color.RED
Color.GREEN
Color.BLUE
```
**Explicação:**
* `from enum import Enum`: Importa a classe `Enum` do módulo `enum`.
* `class Color(Enum)`: Define uma nova enumeração chamada `Color` que herda da classe `Enum`.
* `RED = 1`, `GREEN = 2`, `BLUE = 3`: Define os membros da enumeração, associando um nome a um valor.
* `Color.RED`: Acessa o membro `RED` da enumeração `Color`.
* `Color.RED.value`: Acessa o valor associado ao membro `RED` (que é 1).
* `Color(1)`: Cria um membro da enumeração a partir do valor 1 (retorna `Color.RED`).
* `Color['RED']`: Acessa o membro `RED` da enumeração `Color` usando seu nome como chave.
* `for color in Color`: Itera sobre todos os membros da enumeração.
**Vantagens de usar a classe `Enum`:**
* **Legibilidade:** Torna o código mais claro e fácil de entender.
* **Segurança:** Impede o uso de valores inválidos.
* **Manutenção:** Facilita a manutenção e a refatoração do código.
* **Evita erros:** Garante que você está usando apenas os valores definidos na enumeração.
**Quando usar enumerações?**
Use enumerações quando você tiver um conjunto fixo de opções ou estados que precisam ser representados de forma clara e segura. Exemplos:
* Cores (vermelho, verde, azul)
* Dias da semana (segunda, terça, quarta, etc.)
* Status de um pedido (pendente, processando, enviado, entregue)
* Níveis de prioridade (baixa, média, alta)
**Referências:**
* [Python enumerate() function (w3schools.com)](https://www.w3schools.com/python/ref_func_enumerate.asp)
* [enum — Support for enumerations — Python 3.12.3 documentation](https://docs.python.org/3/library/enum.html)