Python, ao contrário de algumas outras linguagens de programação, não incluiu uma declaração tradicional de switch case até a versão 3.10. Neste tutorial, exploraremos como o equivalente ao switch case do Python funciona e como ele pode ser implementado usando o recurso de correspondência de padrões estruturais do Python.
Entendendo as Declarações Tradicionais de Switch Case
Antes do Python 3.10, os desenvolvedores de Python tinham que usar várias declarações if-elif-else ou dicionários para simular a funcionalidade de switch case. Aqui está um exemplo básico usando if-elif-else:
day = input("Enter the day of the week: ").capitalize() if day == "Saturday" or day == "Sunday": print(f"{day} is a weekend.") elif day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]: print(f"{day} is a weekday.") else: print("That's not a valid day of the week.")
Saturday is a weekend.
Introduzindo Match e Case no Python 3.10
Com o Python 3.10, a declaração match e as palavras-chave case foram introduzidas, proporcionando uma solução mais elegante, semelhante às declarações tradicionais de switch case em outras linguagens.
Entendendo a Sintaxe Básica
Vamos considerar um cenário onde queremos categorizar os dias da semana em categorias de fim de semana ou dia de semana, e também identificar um dia específico. Veja como podemos usar a declaração match:
day = input("Enter the day of the week: ").capitalize() match day: case "Saturday" | "Sunday": print(f"{day} is a weekend.") case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday": print(f"{day} is a weekday.") case _: print("That's not a valid day of the week.")
Monday is a weekday.
- Entrada do Usuário e Método
capitalize()
: Começamos pegando a entrada do usuário para o dia da semana e usamos o métodocapitalize()
para formatá-lo corretamente (primeira letra maiúscula, outras minúsculas). - Usando a Declaração
match
: Em seguida, usamosmatch
para avaliar a variável day. - Pesquisa de Padrões com
case
:- O primeiro
case
verifica se a entrada é “Saturday” (Sábado) ou “Sunday” (Domingo). O símbolo “|” também conhecido como operador OR bitwise é usado para corresponder a um dos múltiplos padrões. Se a entrada for qualquer um destes, imprime que o dia é um fim de semana. - O segundo caso abrange todos os dias da semana verificando contra cada um. Se a entrada corresponder a algum dia da semana, imprime que o dia é um dia da semana.
- O primeiro
- Caso de Recuo (
_
): O último caso age como um padrão padrão (`else` statement), capturando qualquer entrada que não corresponder aos dias conhecidos, indicando uma entrada inválida. - Não há declarações break: Note que não precisamos usar
break
após cada caso. O Python sai automaticamente da estrutura de correspondência após um correspondimento bem-sucedido.
A sintaxe de correspondência case é mais legível e concisa em comparação com uma série de if-elif-else statements.
Casos de Uso Avançados de Correspondência e Caso em Python
Aplicações de ciências de dados
A instrução match-case do Python pode ser altamente útil nas tarefas de pré-processamento de dados em ciência de dados. O pré-processamento muitas vezes envolve categorizar dados em diferentes grupos com base em critérios específicos.
Por exemplo, em um conjunto de dados de animais, você pode querer categorizá-los com base em sua classe, como mamíferos, aves, répteis, etc. Aqui está um exemplo simplificado:
animal = "Eagle" match animal: case "Eagle" | "Parrot": print("Bird") case "Lion" | "Tiger": print("Mammal") case "Python" | "Crocodile": print("Reptile") case _: print("Unknown Class")
Bird
Essa abordagem simplifica a lógica complexa de if-else e torna o código mais legível e manutenível, especialmente quando se trata de grandes conjuntos de dados com várias categorias.
Cenários de aprendizado de máquina
Em aprendizado de máquina, manipular diferentes tipos de entradas de dados é crucial. A estrutura match-case pode ser empregada para extração de características ou inferência de modelos. Por exemplo, em um modelo de aprendizado de máquina que prevê condições climáticas, match-case pode ser usado para categorizar faixas de temperatura em ‘Frio’, ‘Quente’, ‘Calor’, que podem então ser usadas como características de entrada para o modelo.
Python Switch Case Dificuldades Comuns e Melhores Práticas
Dicas de depuração
Um erro comum ao usar match-case em Python é esquecer de incluir o underscore (_
) para o caso padrão, semelhante ao ‘else’ em statements if-else tradicionais. Isso pode levar a comportamentos inesperados se nenhum dos casos específicos for correspondido. Sempre inclua um caso padrão para lidar com valores inesperados ou diversos.
Considerações de desempenho
Enquanto a instrução de correspondência de casos é uma ferramenta poderosa, seu impacto no desempenho do código Python, particularmente em aplicações em grande escala, deve ser considerado. Em cenários com muitos casos ou correspondência de padrões complexos, o desempenho pode potencialmente ser afetado. A análise de perfil e teste de seu código para desempenho em cenários do mundo real é crucial para compreender e mitigar quaisquer potenciais problemas de desempenho.
Python Match-Case versus Switch-Case Tradicional
Análise comparativa
O match-case do Python difere significativamente das instruções switch-case tradicionais encontradas em linguagens como Java ou C++. Em Java, por exemplo, a instrução switch é limitada a correspondência apenas de valores escalares (como inteiros e tipos enum), enquanto o match-case do Python oferece uma capacidade de correspondência de padrões muito mais flexível, permitindo a correspondência de tipos de dados complexos, como sequências e instâncias de classe. Isso faz com que a implementação do Python seja mais poderosa, mas também requer uma compreensão mais profunda dos conceitos de correspondência de padrões.
Guia de transição
Para programadores familiarizados com instruções switch-case tradicionais em linguagens como C++ ou Java, a transição para o match-case do Python requer uma mudança de pensamento da correspondência simples de valores para a correspondência de padrões.
É importante entender que o match-case do Python é mais do que apenas um switch-case; é uma ferramenta versátil para desconstelar tipos de dados e extrair informações de estruturas complexas. A prática com diferentes tipos de dados e padrões é fundamental para dominar seu uso.
Conclusão
A introdução do comando match e case no Python na versão 3.10 fornece uma funcionalidade longamente aguardada para desenvolvedores que estão familiarizados com as estruturas switch case de outras linguagens. Ele oferece uma maneira limpa e concisa para lidar com múltiplas condições, melhorando a legibilidade e a manutenção do código.
Você pode ler mais sobre Funções no Python em nossa tutorial completo e explorar esta e outras conceitos em nosso Curso Intermediário de Python.
Source:
https://www.datacamp.com/tutorial/python-switch-case