Recursos Avançados do Python para Programação Eficiente

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.

  1. 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:

  1. Gerar números ímpares entre 3 e 11.
[valor for valor in range(3, 12) if valor % 2 != 0]
  1. 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)]
  1. 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 yield em 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.

  1. 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().

  1. 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
  1. 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))
  1. 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 (requer functools).
  • sorted(): Ordena elementos, com chave personalizável.
  • max()/min(): Encontram valores extremos.

Aplicações:

  1. Calcular o valor absoluto de uma sequência.
list(map(abs, [-5, 2, -3, 8]))
  1. 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)))

Tags: Python geradores iteradores closures decoradores

Publicado em 8-2 02:01