Olá, estudante, tudo bem com você? Após apresentar o conteúdo da última lição sobre a linguagem de programação Python, suas IDE's e sobre o Jupyter Notebook, sigo dentro do “mundo” da linguagem com objetivo que você conheça módulos, pacotes e funções built-in da linguagem. Na parte de módulos, irei abordar que, em Python, um módulo é um arquivo que contém definições de variáveis, funções e classes. É usado para organizar um código em pedaços mais gerenciáveis e reutilizáveis. Quando você quer usar algo definido em um módulo, você o importa e pode acessar suas definições.
Já pacote é o nome dado em uma coleção de módulos organizados em uma hierarquia de diretórios. Que permite uma organização ainda mais estruturada do código, dividindo-o em subdiretórios e módulos relacionados. Isso é especialmente útil para projetos maiores e mais complexos. Fechando o objetivo desta lição, falarei a respeito das funções built-in. Que são funções que estão disponíveis para uso imediato, sem a necessidade de importar módulos adicionais. São parte da linguagem e fornecem funcionalidades essenciais. Está preparado para conhecer mais da linguagem Python? Estou lhe aguardando!
Imagine que você está desenvolvendo um projeto de software para uma empresa que gerencia uma extensa base de dados de clientes. Seu programa precisa realizar várias operações complexas, como cálculos estatísticos, validações de dados, geração de relatórios e interações com um banco de dados. Neste ponto, é onde a utilização de módulos, pacotes e funções built-in do Python entra em cena para resolver diversos problemas como:
Organização e reutilização de código: ao dividir seu código em módulos, você pode agrupar funções relacionadas e classes em um único lugar. Por exemplo, você pode ter um módulo chamado “calculadora” que contém funções para cálculos estatísticos.
Manutenção simplificada: à medida que seu projeto cresce, a manutenção do código pode se tornar desafiadora. Usando módulos e pacotes bem definidos, você pode atualizar ou corrigir partes específicas do código sem afetar outras áreas.
Eficiência no Desenvolvimento: funções built-in oferecem funcionalidades prontas para uso sem a necessidade de escrever essas rotinas do zero. Isso economiza tempo e esforço, permitindo que você se concentre em aspectos mais específicos do projeto.
O uso inteligente de módulos, pacotes e funções built-in resolve problemas relacionados à organização, manutenção, escalabilidade e eficiência no desenvolvimento de projetos de software com a linguagem Python. Essas práticas são essenciais para criar sistemas robustos, flexíveis e de fácil manutenção.
Na lição de hoje, você verá um case sobre a empresa Log Solutions, que opera na área de logística e transporte de mercadorias. Eles gerenciam uma frota de caminhões que fazem entregas em várias regiões do país. No entanto, eles estão enfrentando problemas de ineficiência e atrasos nas rotas de entrega. Cada motorista precisa fazer ajustes manuais em suas rotas, levando a um uso inadequado de combustível e tempo.
Diante disso, a equipe de desenvolvimento decidiu criar um sistema de otimização de rotas para resolver esse problema. E para isso, escolheram utilizar módulos e pacotes Python que são utilizados para desenvolver uma solução eficiente e escalável. Eles criam um módulo chamado “calculadora” que contém funções para cálculos matemáticos, como distâncias entre pontos geográficos, cálculos de tempos de viagem estimados e cálculos de consumo de combustível. Essas funções são reutilizáveis e podem ser acessadas por diferentes partes do sistema. Também se cria um pacote chamado “otimização_rotas”, que inclui módulos para criação de rotas otimizadas com base em critérios como menor distância, menor tempo ou menor consumo de combustível. Eles dividem os módulos em subcategorias como “algoritmos_de_rota” e “dados_geograficos” para uma organização mais clara.
Com a solução, a empresa conseguiu otimizar suas rotas de entrega de maneira eficiente, e agora os motoristas recebem rotas otimizadas em tempo real, economizando tempo, combustível e reduzindo os atrasos nas entregas. Sendo assim, neste case, mesmo ele apresentando uma história fictícia, podemos observar uma situação em que houve a utilização de módulos e pacotes Python para solucionar o problema de uma empresa através de um sistema! Interessante, não é mesmo? Contudo, como você deve imaginar, há alguns detalhes a serem vistos sobre esse assunto, portanto, vamos lá!
Antes de começar com a conceitualização dos itens objetivos desta lição como Módulos, Pacotes e Funções Built-in, preciso te dizer que todos esses componentes são utilizados e exemplificados usando a linguagem de programação Python, inclusive no próximo item que é o saiba aplicar. Acho importante trazer a você por que decidi usar Python nesta lição e nesta disciplina para que não fique com dúvidas! Primeiramente porque Mueller (2020) cita que o Python tem como destaque a legibilidade do código e uma sintaxe concisa, que permite escrever aplicações usando menos linhas de código que outras linguagens de programação. Portanto, com o mundo cada vez mais “corrido”, irá ajudar na compreensão dos conceitos.
Outro fato importante também citado por Mueller (2020) é que usando essa linguagem você realmente consegue escrever uma aplicação em uma plataforma e usá-la em qualquer outra em que precisar, diferentemente de outras linguagens de programação. Este fato é confirmado por Matthes (2023) que diz que Python é uma linguagem tremendamente eficiente, uma vez que seus programas farão mais com poucas linhas de código do que o exigido por muitas outras linguagens. Além disso, com essa linguagem você irá escrever um código mais “limpo”, mais fácil de ler, depurar e de estender e receber incrementos, em comparação com outras linguagens.
De acordo com o site Docs Python (2023a), um módulo é um objeto que serve como uma unidade organizacional de código Python. Os módulos têm um espaço de nomes contendo objetos Pythons arbitrários e são carregados pelo Python por meio do processo de importação que consiste em disponibilizar aquele código Python em outro código ou módulo. Importar um módulo Python é um processo simples e essencial para usar as definições (variáveis, funções, classes etc.) contidas nele. Existem diferentes maneiras de fazer isso como:
Importar um módulo inteiro: suponha que você tenha um módulo chamado “meu_modulo.py”. Para importar o módulo, você pode usar a instrução “import” seguida pelo nome do módulo sem a extensão “.py”. Exemplo: import meu_modulo.
Importar um módulo com nome alternativo: você pode dar um nome alternativo ao módulo durante a importação, o que pode facilitar a digitação ou evitar conflitos de nomes. Exemplo: import meu_modulo as mm.
Importar definições específicas do módulo: se você estiver interessado apenas em algumas definições específicas do módulo, pode importá-las diretamente. Exemplo: from meu_modulo import minha_funcao, minha_variavel.
Importar todas as definições do módulo: embora não seja recomendado por motivos de legibilidade, é possível importar todas as definições de um módulo usando o caractere de asterisco “*”. Exemplo: from meu_modulo import *.
Lembre-se de que é boa prática usar a abordagem mais específica possível para evitar conflitos de nomes e facilitar a manutenção do código. Seu código será mais claro e mais fácil de entender.
Você tem uma outra forma de acessar as definições de um módulo após a importação, que seria com o uso de nomes definidos em um módulo que podem ser acessados usando o nome do módulo como prefixo. Isso é conhecido como a notação de ponto. Quando você importa um módulo e deseja usar suas definições (variáveis, funções, classes etc.), você usa o nome do módulo seguido por um ponto e, em seguida, o nome da definição que deseja acessar.
Veja o seguinte exemplo usando um módulo chamado “meu_modulo”: suponha que o módulo possua uma função chamada “minha_funcao” você, então, poderia acessá-la após a importação do meu_modulo como meu_modulo.minha_funcao.
De acordo com o site Docs Python (2023b), um módulo Python é capaz de conter submódulos ou recursivamente subpacotes. Sendo assim, tecnicamente, um pacote é um módulo Python com um atributo __path__. Este é um conceito que permite organizar módulos relacionados em uma estrutura hierárquica de diretórios.
Quando falamos de pacote, estamos nos referindo a um diretório que contém um arquivo especial chamado “__init__.py” (que pode estar vazio) e um ou mais módulos Python. Esses módulos dentro do pacote podem ser acessados usando a notação de ponto, assim como em módulos individuais. Os pacotes são úteis quando você tem um conjunto de módulos que estão relacionados e desempenham uma função específica, pois ajudam a organizar e estruturar melhor o código, facilitando a manutenção, o reuso e a colaboração entre desenvolvedores. Desta forma, os pacotes oferecem uma maneira poderosa de modularizar código em projetos Python mais complexos, facilitando o gerenciamento de múltiplos módulos e a manutenção do código em si.
Veja a estrutura de um diretório:
meu_pacote/
│ __init__.py
│
├── modulo1.py
└── modulo2.py
A linguagem Python possui um conjunto de funções que estão disponíveis para uso imediato, sem a necessidade de importar módulos adicionais. Essas funções são chamadas de funções built-in. Elas são parte integrante da linguagem e fornecem funcionalidades essenciais. Algumas das funções built-in mais comuns e usadas em Python incluem:
print(): usada para imprimir valores na saída padrão.
len(): retorna o número de itens em um objeto, como uma lista ou string.
type(): retorna o tipo de um objeto.
input(): solicita entrada do usuário.
range(): gera uma sequência de números.
sum(): calcula a soma dos elementos de uma sequência.
max(): encontra o valor máximo em uma sequência.
min(): encontra o valor mínimo em uma sequência.
Confira na Figura 1 exemplos de uso de algumas destas funções citadas como: print(), len(), input() e sum():
Agora entenda o passo a passo dos exemplos da Figura 1:
Comentários: toda linha que se inicia com # significa que o código não é executado, é somente um código para você identificar o que será realizado.
Linhas 1 e 2: exibe na tela o texto “Olá, mundo!”.
Linhas 3, 4 e 5: preenche um vetor com 3 frutas e depois exibe o resultado “Número de frutas: 3”.
Linhas 6, 7 e 8: exibe um prompt com o texto “Digite seu nome: ” e suponha que você digite a palavra João, então, ele exibirá o resultado “Olá, João”.
Linhas 9, 10, 11 e 12: define um vetor de números, soma seus respectivos valores e armazena na variável soma e exibe o seguinte resultado: “Soma dos números: 150”.
Bom, a parte conceitual agora você já sabe, mas como é utilizar isso na prática? Vamos experimentar?
Agora, chegou a sua vez de colocar os seus conhecimentos em prática e criar um módulo em Python com funções para realizar as operações fundamentais de matemática com dois números. Primeiro, você irá acessar o ambiente para codificar, neste caso vamos usar o site OnlineGDB que pode ser acessado clicando aqui. Com o site aberto, você irá selecionar no canto superior direito na opção Language a linguagem de programação Python 3.
Pronto, agora você já tem um arquivo main.py para utilizar seu módulo, basta, então, que você crie-o, para isso irá clicar no ícone de novo arquivo, que é o primeiro dos ícones logo acima do nome do arquivo main (o primeiro ícone da esquerda para direita) e irá dar o nome dele de operacoes_matematicas.py e irá digitar o seguinte código, conforme a Figura 2:
Agora você pode novamente clicar no arquivo main.py para utilizar o módulo recém-criado, primeiro você seleciona tudo o que está escrito nesse arquivo para depois apagar e escrever seu próprio código, depois, irá digitar o seguinte código, conforme a Figura 3:
Pronto! Agora basta que você clique no botão ▶ Run e conferir o resultado da 4 operações com os números 10 e 5 que deverá ser como o resultado:
Soma: 15
Diferença: 5
Produto: 50
Quociente: 2.0
DOCS PYTHON. Módulo. [S. l.], 2023a. Disponível em: https://docs.python.org/pt-br/3/glossary.html#term-module. Acesso em: 20 out. 2023.
DOCS PYTHON. Pacote. [S. l.], 2023b. Disponível em: https://docs.python.org/pt-br/3/glossary.html#term-package. Acesso em: 20 out. 2023.
MATTHES, E. Curso Intensivo de Python: uma introdução prática e baseada em projetos à programação. 3. ed. São Paulo: Novatec, 2023.
MUELLER, J. P. Começando a programar em Python para leigos. 2. ed. Rio de Janeiro: Altabooks, 2020.