1.1 Introdução aos módulos
Um módulo em Python é um arquivo com extensão .py que contém código. Os módulos permitem dividir um código grande em partes menores e manejáveis. Cada módulo pode conter funções, classes e variáveis, e também executar algum código ao ser importado.
Exemplo de um módulo simples
Vamos criar um módulo mymodule.py:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
Agora, esse módulo pode ser importado e utilizado em outro arquivo.
1.2 Importar módulos
Python fornece várias maneiras de importar módulos. Vamos examinar cada uma delas.
Importação inteira do módulo
A sintaxe geral para esta operação é:
import modulo
Este método importa o módulo inteiro, e você pode usar suas funções e variáveis especificando o nome do módulo.
import modulo
print(modulo.greet("Alice")) # Saída: Hello, Alice!
print(modulo.pi) # Saída: 3.14159
Já fizemos algo parecido com o módulo math, lembra?
import math
print(math.ceil(13 / 7)) # arredondamento para cima
print(math.floor(13 / 7)) # arredondamento para baixo
Importar elementos específicos do módulo
Você pode importar não tudo do módulo, mas apenas alguns de seus elementos. A sintaxe geral para esta operação é:
from modulo import func, var
Este método importa apenas funções, classes ou variáveis específicas do módulo, permitindo usá-las sem especificar o nome do módulo.
from mymodule import greet, pi
print(greet("Bob")) # Saída: Hello, Bob!
print(pi) # Saída: 3.14159
Importar módulo com pseudônimo
A sintaxe geral para esta operação é:
import modulo as alias
Este método permite importar um módulo e atribuir-lhe outro nome, o que pode ser útil para encurtar nomes de módulos longos ou resolver conflitos de nomes.
import mymodule as mm
print(mm.greet("Charlie")) # Saída: Hello, Charlie!
print(mm.pi) # Saída: 3.14159
Importar todos os elementos do módulo
A sintaxe geral para esta operação é:
from modulo import *
Este método importa todas as funções, classes e variáveis do módulo, permitindo usá-las sem especificar o nome do módulo. No entanto, o uso deste método não é recomendado, pois pode causar conflitos de nomes e dificultar a leitura do código.
from mymodule import *
print(greet("Dave")) # Saída: Hello, Dave!
print(pi) # Saída: 3.14159
1.3 Sob o capô do processo de importação
Ordem de busca de módulos
Quando você importa um módulo, Python o procura em uma ordem específica:
- Diretório atual: O Python procura primeiro o módulo no diretório atual de onde o script foi executado.
- Variável de ambiente
PYTHONPATH: Se o módulo não for encontrado no diretório atual, o Python procura nos diretórios especificados na variável de ambientePYTHONPATH. - Diretórios padrão: Se o módulo ainda não for encontrado, o Python procura nos diretórios padrão, como os especificados em
sys.path.
Exemplo:
import sys
for path in sys.path:
print(path)
Importação local e global
Você pode importar módulos tanto no nível global (no início do arquivo) quanto no nível local (dentro de uma função ou método).
Importação global
A importação global é feita no início do arquivo e torna o módulo importado acessível em todo o arquivo.
import math
def calculate_circle_area(radius):
return math.pi * radius ** 2
Importação local
A importação local é feita dentro de uma função ou método e torna o módulo importado acessível apenas nessa função ou método.
def calculate_square_root(x):
import math
return math.sqrt(x)
print(calculate_square_root(16))
A importação local pode ser útil para reduzir o tempo de carregamento do módulo ou para evitar conflitos de nomes.
1.4 Importação dinâmica
A importação dinâmica permite importar módulos durante a execução do programa. Isso pode ser útil quando é necessário importar módulos com base na entrada do usuário ou outras condições dinâmicas.
A sintaxe geral para esta operação é:
module = __import__("modulo")
Vamos, por exemplo, importar o módulo math dessa maneira.
module_name = "math"
module = __import__(module_name)
print(module.sqrt(16)) # Saída: 4.0
Trabalhar com o código subsequente é semelhante ao uso de import as, quando o módulo math é atribuído ao pseudônimo module.
1.5 Acesso a atributos de módulo usando a função getattr
A função getattr permite acessar dinamicamente atributos de um módulo (ou qualquer objeto). Ela pode ser útil em casos onde os nomes de atributos são desconhecidos antecipadamente ou podem mudar durante a execução do programa.
Sintaxe da função getattr:
getattr(object, name, default = None)
Onde object é o objeto do qual se deseja obter o atributo, name é uma string contendo o nome do atributo, e default é o valor retornado caso o atributo com o nome especificado não exista. O valor padrão para o parâmetro default é None.
Exemplo de uso da função getattr:
import math
# Obtemos o atributo sqrt do módulo math
sqrt_function = getattr(math, 'sqrt')
print(sqrt_function(25)) # Saída: 5.0
# Tentamos obter um atributo inexistente, retornando o valor padrão
non_existent_attr = getattr(math, 'non_existent', 'default_value')
print(non_existent_attr) # Saída: default_value
Neste exemplo, usamos a função getattr para obter a função sqrt do módulo math, e então chamamos essa função para calcular a raiz quadrada de 25. Caso o atributo com o nome especificado não exista, é retornado o valor padrão default_value.
GO TO FULL VERSION