Article image
Pedro Silva
Pedro Silva25/07/2024 12:17
Compartilhe

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á retornar None

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:

  1. Parâmetros Posicionais : São os parâmetros que correspondem à posição dos argumentos na chamada da função.
  2. 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.
  3. 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.

Compartilhe
Comentários (2)
Pedro Silva
Pedro Silva - 25/07/2024 14:09

Obrigado Paulo!

Paulo Cesar
Paulo Cesar - 25/07/2024 13:43

Um bom artigo! Obrigado por compartilhar.