Guia do Desenvolvedor Python - Funções e Modularização #6/ Python Series
- #Python
Introdução
Olá devs, dando continuidade aos artigos para o guia do desenvolvedor Python, estaremos aprendendo sobre funções e modularização. Tendo um papel fundamental na estruturação e reutilização de código em Python, as funções servem para facilitar a manutenção e entendimento da aplicação que estamos desenvolvendo.
Neste artigo iremos explorar o conceito de funções em Python desde sua sintaxe básica até técnicas avançadas de definição e chamada de funções. Assim como também entender como o uso delas promover a escrita de código limpo, legível e reutilizável.
Uma vez que tenhamos compreendido profundamente como as funções operam em Python, veremos também a importância do entendimento de como trabalhar com módulos e pacotes da biblioteca padrão. Ao final desse artigo você irá ter expandido suas capacidades de programação para lidar com problemas complexos de maneira estruturada e eficaz.
Definição e chamada de funções
Em Python, funções são blocos de código reutilizáveis que realizam uma ação específica. Seu uso traz uma melhor manutenção ao código, assim como também uma organização mais eficiente.
Para definirmos uma função em Python , utilizamos a palavra chave def
, seguido do nome da função e entre parênteses , os parâmetros que a função pode receber. O bloco de código da função é indentado, preferencialmente deve ser usado quatro espaços para essa indentação, e a função pode possuir uma ou mais instruções.
def nome_da_funcao(parametro1, parametro2, ...):
# bloco de código da função
instrucao1
instrucao2
# opcional: retorno de um valor
return algum_valor
No exemplo acima teremos:
nome _ da_funcao
: é o nome da função que declaramos;parametro1, parametro2, ...
: são os valores que serão passados e usados dentro da função, os mesmos podem ser opcionais;return algum _valor
: usado para retornar o resultado da função, também opcional e caso essa instrução não seja informada, implicitamente irá retornarNone
Uma vez que tenha sido declarada, a função pode ser usada em qualquer parte do código , fornecendo os argumentos necessários, se houver:
# Chamada da função sem parâmetros
nome_da_funcao()
# Chamada da função com parâmetros
nome_da_funcao(valor1, valor2, ...)
Parâmetros e argumentos em funções
Possuindo a definição de função e já tenho algum entendimento da sua sintaxe, iremos agora aprofundar mais em parâmetros e argumentos.
Parâmetros
Na sintaxe da função vimos que os parâmetros podem ser opcionais e são as variáveis listadas entre os parênteses no momento da definição de uma função. Eles são usados para receber valores quando a função é chamada. Os parâmetros definem quais informações uma função espera para realizar sua tarefa.
def soma(a, b):
resultado = a + b
return resultado
Por exemplo, na função acima o a
e b
são os parâmetros da função soma.
Argumentos
Vimos que parâmetros são as variáveis informadas na definição da função e para entender o conceito de argumentos, basta saber que argumentos são os valores reais que serão informados para serem atribuídos aos parâmetros da função.
resultado_soma = soma(3, 5)
`3` é o argumento que será atribuído ao parâmetro `a`
`5` é o argumento que será atribuído ao parâmetro `b`
Tipos de parâmetros
Existem diferentes tipos de parâmetros que podem ser definidos em uma função em Python:
Parâmetros Posicionais
: São os parâmetros que correspondem à posição dos argumentos na chamada da função.Parâmetros Nomeados
: São os parâmetros em que você especifica explicitamente o nome do parâmetro ao passar o argumento. Isso permite que você passe os argumentos em qualquer ordem, desde que você especifique o nome do parâmetro correspondente.Parâmetros Padrão
: É possível definir valores padrão para parâmetros na definição da função. Esses valores serão usados caso o argumento correspondente não for fornecido na chamada da função.
Usando *args e **kwargs
Além dos parâmetros normais, Python também suporta *args
e **kwargs
, que permitem lidar com um número variável de argumentos posicionais e nomeados, respectivamente. Isso é útil quando você não sabe antecipadamente quantos argumentos serão passados para a função.
args
: Permite passar um número variável de argumentos posicionais para a função. Os argumentos são tratados como uma tupla dentro da função. Por exemplo:
def somar_numeros(*args):
resultado = 0
for num in args:
resultado += num
return resultado
print(somar_numeros(1, 2, 3)) # Saída: 6
print(somar_numeros(1, 2, 3, 4, 5)) # Saída: 15
*kwargs
: Permite passar um número variável de argumentos nomeados para a função. Os argumentos são tratados como um dicionário dentro da função, onde as chaves são os nomes dos parâmetros e os valores são os argumentos correspondentes. Por exemplo:
def imprimir_info(**kwargs):
for chave, valor in kwargs.items():
print(f"{chave}: {valor}")
imprimir_info(nome="João", idade=30, cidade="São Paulo")
# Saída:
# nome: João
# idade: 30
# cidade: São Paulo
Importação de módulos e pacotes da biblioteca padrão
A importação de módulos e pacotes da biblioteca padrão do Python é essencial para expandir a funcionalidade de seus programas sem a necessidade de escrever código do zero. Aqui estão algumas práticas comuns:
Importação de um Módulo Específico
import math
O código acima importa o módulo math
, com isso temos acesso às funções matemáticas como math.sqrt( )
e math.sin( )
Importação de Módulo com Alias
import datetime as dt
Nesse caso o módulo datetime
é renomeado para dt, tornando o acesso às funcionalidades da seguinte forme: dt.datetime.now( )
Importação de Funções/Membros Específicos
from random import randint, choice
Isso importa apenas as funções randit
, choice
do módulo random
.
Importação de Todo o Conteúdo do Módulo
from os import *
Isso importa todo o conteúdo do módulo, permitindo o acesso direto a todas suas funções.
Importação Condicional
try:
import tkinter as tk
except ImportError:
import Tkinter as tk
Isso permite que seu código se adapte a diferentes versões do Python, importando o módulo tkinter
na versão 3.x e Tkinter
na versão 2.x.
Importação de um Pacote (Submódulo)
from urllib.request import urlopen
Isso importa a função urlopen
do submódulo request
do pacote urllib
, utilizada para abrir URLs.
Importação de Módulo de Outro Diretório
import sys
sys.path.append('/path/to/your/module/')
from your_module import your_function
Isso adiciona um diretório ao caminho de busca de módulos (sys.path
) e importa uma função específica de um módulo personalizado.
Ao importar módulos e pacotes da biblioteca padrão do Python, é crucial seguir as melhores práticas para manter o código organizado e legível, evitando conflitos de nomes e garantindo a compatibilidade entre diferentes versões e ambientes de execução do Python.
Conclusão
Funções e modularização são conceitos fundamentais em Python que permitem escrever código mais limpo , organizado e fácil de manter. Com funções é possível encapsular lógica repetitiva ou complexa e junto da modularização , possibilita estruturar o projeto de forma mais eficiente e hierárquica. Dominar os conceitos de funções e modularização vão aumentar a nossa produtividade como desenvolvedores e ainda ter uma ótima qualidade do nosso código. Devemos sempre buscar em nossos projetos a aplicação de funções e modularização para obter melhores resultados.