Introdução ao Python Avançado
Python é uma linguagem amplamente utilizada em ciência de dados e aprendizado devido à sua simplicidade e bibliotecas robustas. Este artigo explora características avançadas como geradores, iteradores, closures, decoradores e funções de alta ordem integradas, que permitem escrever código conciso e eficiente.
- Geradores e Compreensões
Compreensões de Lista
As compreensões de lista oferecem uma forma compacta de criar listas. A sintaxe básica inclui variantes com filtros e loops aninhados.
Exemplos Práticos:
- Gerar números ímpares entre 3 e 11.
[valor for valor in range(3, 12) if valor % 2 != 0]
- Calcular perímetros e áreas de círculos com raios de 1 a 10.
[(2 * raio * 3.1416, 3.1416 * raio ** 2) for raio in range(1, 11)]
- Encontrar números primos entre 1 e 100.
[n for n in range(2, 101) if all(n % divisor != 0 for divisor in range(2, int(n ** 0.5) + 1))]
Geradores
Geradores produzem valores sob demanda, economizando memória ao não armazenar toda a sequência na memória.
Criação:
- Usando
yieldem funções. - Transformando compreensões de lista em geradores com parênteses.
Consumo: Iterar com for ou usar next().
Vantagens: Uso eficiente de memória e retenção de estado entre iterações.
Aplicações: Sequências como Fibonaccci, processamento de dados em streaming ou cálculo de médias acumuladas.
- Iteradores
Iteradores são objetos que permitem percorrer elementos sequencialmente, lembrando a posição atual.
Diferença de Geradores: Geradores são um tipo de iterador que utiliza computação preguiçosa, enquanto iteradores podem ser construídos antecipadamente.
Criação: Converter objetos iteráveis como listas ou strings com a função iter().
- Closures
Closures ocorrem quando uma função interna referencia variáveis de uma função externa, mantendo seu estado mesmo após a execução da externa.
Utilidade: Promover reutilização de código e servir como base para decoradores.
Exemplo de Implementação:
def multiplicador(fator):
def aplicar(numero):
return numero * fator
return aplicar
dobro = multiplicador(2)
print(dobro(5)) # Saída: 10
- Decoradores
Decoradores são funções que modificam o comportamento de outras funções sem alterar seu código-fonte.
Cenários Comuns: Logging, medição de tempo de execução, controle de acessso e caching.
Exemplo com Parâmetros Variáveis:
import functools
def registrar_execucao(func):
@functools.wraps(func)
def envoltorio(*args, **kwargs):
print(f"Chamando {func.__name__}")
return func(*args, **kwargs)
return envoltorio
@registrar_execucao
def somar(a, b):
return a + b
print(somar(3, 4))
- Funções de Alta Ordem Integradas
Funções de alta ordem aceitam outras funções como argumentos ou retornam funções.
Funções Úteis:
map(): Aplica uma função a cada elemento de um iterável.filter(): Seleciona eleemntos com base em uma condição.reduce(): Acumula valores usando uma função (requerfunctools).sorted(): Ordena elementos, com chave personalizável.max()/min(): Encontram valores extremos.
Aplicações:
- Calcular o valor absoluto de uma sequência.
list(map(abs, [-5, 2, -3, 8]))
- Gerar fatoriais para números de 1 a 20.
def fatorial(num):
if num <= 1:
return 1
return num * fatorial(num - 1)
list(map(fatorial, range(1, 21)))