Iteradores, Geradores, Módulos, Pacotes e o Módulo JSON em Python

  1. Iteradores =============

1.1 O que são Iteradores?

Iteradores são ferramentas utilizadas para percorrer coleções de dados, extraindo valores um a um de forma sequencial. Cada valor obtido durante a iteração serve como ponto de partida para a próxima iteração. É importante distinguir que simplesmente repetir uma ação não constitui iteração.

# Implementando iteração com loop while
numeros = [10, 20, 30, 40, 50, 60]
indice = 0
while indice < len(numeros):
    print(numeros[indice])
    indice += 1

1.2 Objetos Iteráveis

Qualquer objeto que possua o método __iter__ é considerado um objeto iterável. Esses objetos podem ser percorridos em um loop.

# Strings são objetos iteráveis
nome = 'ronaldo'
print(nome.__iter__())  # <str_iterator object at 0x...>

# Números inteiros, floats e booleanos não são iteráveis
# Os下面的会出现错误:
# print(1.__iter__)
# print(2.5.__iter__)
# print(True.__iter__)

# Listas, tuplas, dicionários e conjuntos são iteráveis
print([1, 2, 3].__iter__())
print((4, 5, 6).__iter__())
print({'a': 1, 'b': 2, 'c': 3}.__iter__())
print({7, 8, 9}.__iter__())

1.3 Objetos Iteradores

Um iterador é um objeto que possui ambos os métodos __iter__ e __next__. O método __next__ retorna o próximo elemento da sequência.

# Criando um iterador a partir de uma string
it = 'neymar'.__iter__()
print(it.__next__())  # n
print(it.__next__())  # e
print(it.__next__())  # y
print(it.__next__())  # m
print(it.__next__())  # a
print(it.__next__())  # r
# Quando os elementos esgotam, lança uma exceção StopIteration

# Reiniciando o iterador
it = 'neymar'.__iter__()
print(it.__next__())  # n

# Listas, tuplas, dicionários e conjuntos também são iteradores
print([1, 2, 3].__iter__().__next__())  # 1
print((4, 5, 6).__iter__().__next__())  # 4
print({1: 'um', 2: 'dois'}.__iter__().__next__())  # 1
print({'x', 'y', 'z'}.__iter__().__next__())  # y

  1. Geradores ============

2.1 Conceito

Geradores são iteradores especiais que produzem valores sob demanda, em vez de armazenar toda a sequência na memória de uma vez. Essa abordagem é extremamente eficiente para lidar com grandes volumes de dados ou sequências infinitas.


2.2 Criando Geradores

2.2.1 Expressão Geradora

Uma expressão geradora é semelhante a uma list comprehension, mas utiliza parênteses em vez de colchetes.


2.2.2 Palavra-chave yield

A palavra-chave yield transforma uma função em um gerador. Quando a função encontra um yield, ela pausa e retorna o valor especificado. Na próxima chamada, a execução continua do ponto onde parou.


Aplicações práticas do yield



  1. Funcionamento do Loop for ============================

O loop for funciona convertendo o objeto iterável em um iterador através do método iter(), e então chama repetidamente next() para obter valores. Quando a exceção StopIteration é lançada, o loop termina automaticamente.

  1. Módulos ==========

4.1 Introdução

Um módulo em Python é simplesmente um arquivo com extensão .py. O nome do módulo é o nome do arquivo sem a extensão.

Tipos de módulos:

  • Módulos nativos: Incluídos na instalação padrão do Python (os, random, sys)
  • Módulos de terceiros: Desenvolvidos pela comunidade, necessários instalar (pandas, requests, numpy)
  • Módulos personalizados: Criados pelo próprio programador

Um módulo é um arquivo .py individual. Um pacote (package) é uma pasta que contém módulos e um arquivo __init__.py.

4.2 Utilizando Módulos

Para este exemplo, considere um arquivo chamado utilitarios.py:

4.2.1 Importação Direta


4.2.2 Importação Específica


A instrução from modulo import * só pode ser usada no nível mais alto do arquivo, não dentro de funções.

  1. Pacotes ==========

Um pacote é uma estrutura que agrupa módulos relacionados. Ele consiste em uma pasta contendo um arquivo especial __init__.py.

5.1 Criando Pacotes

Método automático:

No PyCharm, clique com o botão direito na pasta → New → Python Package. O IDE cria automaticamente a estrutura.

Método manual:

  1. Crie uma pasta
  2. Adicione um arquivo __init__.py dentro dela

5.2 Utilizando Pacotes


Quando um pacote é importado, o arquivo __init__.py é executado automaticamente.

5.3 Caminhos Relativos e Absolutos

  • Caminho relativo: Referencia a partir do diretório atual
  • Caminho absoluto: Referencia a partir da raiz do sistema de arquivos
  • . - Diretório atual
  • .. - Diretório pai
  1. Módulo JSON ==============

O formato JSON é amplamente utilizado para persistência de dados. Diferente de arquivos de texto puro, JSON permite armazenar estruturas de dados complexas como dicionários e listas.

<codeimport arquivo="" arquivo:="" as="" convertendo="" dados="" dados_lidos="json.load(arquivo)" de="" dic="json.loads(json_str)" dicion="" em="" encoding="utf-8" ensure_ascii="False)" exemplo="" gravnado="" json="" json.dump="" json_str="json.dumps(dados)" lendo="" miami="" open="" para="" print="" resultaddo:="" string="" type="" volta="" with=""></codeimport>

O parâmetro ensure_ascii=False permite que caracteres não-ASCII (como acentos) sejam gravados corretamente no arquivo JSON.

Tags: Python iteradores geradores yield modulos

Publicado em 7-13 20:21