16 minutos de leitura


Autor(a)
Olá, me chamo Mike de Sousa. Atuo como Suporte Educacional aqui na Alura, onde tenho a oportunidade de aprender ainda mais enquanto ajudo outras pessoas em sua jornada. Tenho um foco especial em Front-end, explorando React e TypeScript, mas estou sempre em busca de novos conhecimentos e desafios. Fora da programação, gosto de jogar RPG de mesa, explorar novas ideias e deixar a criatividade fluir.
Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.
O Python se destacou no mundo da tecnologia por unir simplicidade e versatilidade. Seja em ciência de dados, desenvolvimento web, automação ou projetos complexos, a linguagem se mostra confiável e adaptável.
Entre seus recursos mais úteis estão as funções, que tornam o código mais organizado e evitam a repetição de tarefas.
Em vez de reescrever a mesma lógica várias vezes, basta chamar a função e ela executa o que foi definido, deixando o programa mais limpo e reduzindo as chances de erro.
Para aproveitar todo o potencial do Python, é importante entender como as funções funcionam e como elas podem facilitar a criação de programas eficientes e reutilizáveis.
Neste artigo, você vai descobrir isso na prática, com explicações e exemplos aplicáveis ao seu dia a dia de programação.
Funções são blocos de código que executam uma tarefa específica. Elas permitem que você organize o programa em pequenas partes, cada uma responsável por uma função bem definida, evitando repetição e tornando o código mais eficiente e estruturado.
Antes de começar a criar suas próprias funções, vale destacar alguns aspectos que tornam esse recurso tão útil:
Avalie este artigo
Funções oferecem vantagens que vão além da organização do código. Elas tornam o desenvolvimento mais flexível e adaptável a mudanças, permitindo que você ajuste ou expanda funcionalidades sem precisar reescrever grandes trechos do programa.
Além disso, funções ajudam a simplificar a resolução de problemas complexos, pois tarefas complicadas podem ser divididas em etapas menores, que podem ser implementadas e testadas separadamente. Elas também promovem consistência no código, garantindo que tarefas recorrentes sigam a mesma lógica e reduzindo discrepâncias.
Funções transformam ideias em ações concretas dentro do código, criando estruturas que podem ser aproveitadas em diferentes contextos. Elas permitem automatizar processos repetitivos, encapsulando tarefas que exigem múltiplos passos e evitando retrabalho.
Também ajudam a integrar funcionalidades, combinando várias etapas em um único comando e simplificando a execução de processos mais sofisticados. Além disso, funções apoiam o aprendizado e a experimentação, pois ao isolar uma funcionalidade em um bloco separado, você consegue testar novas abordagens sem comprometer o restante do código.
Em Python, existem diferentes formas de criar e utilizar funções, cada uma adequada para situações específicas. Conhecer esses tipos é importante para aproveitar ao máximo o que a linguagem oferece e escrever códigos mais organizados e versáteis.
De forma geral, podemos dividir as funções em três categorias principais:
Cada um desses tipos tem suas particularidades e aplicações práticas, que veremos com mais detalhes mais a frente nesse artigo.
Em Python, criar uma função é simples, mas para que ela funcione corretamente, é importante entender a sintaxe a as regras básicas que devemos seguir.
Em termos gerais, a estrutura de uma função segue este formato:
```
def nome_da_função(parametros):
<comandos>
return
```No exemplo acima temos as seguintes regras sendo aplicadas:
Agora um exemplo prático:
```
def calcular_media(notas):
media = sum(notas) / len(notas)
return media
```No exemplo:
Dessa forma, sempre que você passar uma lista de números para `calcular_media`, a função irá somar todos os valores, dividir pelo total de elementos e retornar o resultado, permitindo que você reutilize essa função em várias partes do seu programa sempre que precisar do mesmo cálculo.
Parâmetros e argumentos são importantes para tornar funções mais flexíveis e reutilizáveis. Eles permitem que uma função receba informações externas e execute operações diferentes dependendo dos valores fornecidos.
Parâmetros são variáveis definidas na função, que representam os dados que a função espera receber. Por exemplo:
```
def saudacao(nome):
print(f”Olá, {nome}! É um prazer te conhecer!”)
```Aqui, `nome` é o parâmetro da função. Já argumentos são os valores reais passados para a função quando a chamamos.
```
saudacao(“Maria”)
```O valor `”Maria”` é o argumento passado para o parâmetro `nome`, e a função então imprime:
```
Olá, Maria! É um prazer te conhecer!
```Funções podem receber mais de um parâmetro, permitindo processar diferentes tipos de informação ao mesmo tempo. Por exemplo:
```
def apresentar_pessoa(nome, idade):
print(f“Nome: {nome}, Idade: {idade}”)
```Chamando essa função:
```
apresentar_pessoa(“Carlos”, 30)
```E a saída:
```
Nome: Carlos, Idade: 30
```Em muitas situações, é conveniente que uma função tenha valores padrão para seus parâmetros. Isso significa que, caso nenhum argumento seja informado na chamada, a função usará o valor definido por padrão.
Esse recurso torna o código mais flexível e evita erros quando um argumento não é fornecido.
```
def saudacao(nome=”Visitante”):
print(f“Olá, {nome}! Como você está?”)
```Você também pode definir mais de um valor padrão:
```
def apresentar_pessoa(nome=”Desconhecido”, idade=0):
print(f”Nome: {nome}, Idade: {idade}”)
```Assim, ao chamar:
Ao chamar uma função, você pode passar os valores dos parâmetros de duas maneiras: seguindo a ordem definida ou informando o nome do parâmetro explicitamente. Quando usamos o nome do parâmetro, temos o que chamamos de argumentos nomeados (_keyword arguments_).
Esse recurso aumenta a clareza do código, pois fica evidente qual valor corresponde a qual parâmetro.
```
def apresentar_pessoa(nome, idade):
print(f”Nome: {nome}, Idade: {idade}”)
# Chamando a função pela ordem dos parâmetros
apresentar_pessoa(“Ana”, 25)
# Chamando com argumentos nomeados
apresentar_pessoa(idade=40, nome=“Henrique”)
```A saída será:
```
Nome: Ana, Idade: 25
Nome: Henrique, Idade: 40
```Observe que, com argumentos nomeados, a ordem não importa, já que o Python associa cada valor ao parâmetro correto.
O Python já vem com uma série de funções prontas para uso, chamadas de funções integradas (_build-in funtions_). Elas estão disponíveis em qualquer programa, sem que você precise importar bibliotecas externas, e resolvem tarefas do dia a dia de forma eficiente.
Essas funções cobrem desde operações matemáticas básicas até manipulação de tipos de dados e interações com o usuário. Aprender a utilizá-las é um passo importante para escrever programas mais enxutos e produtivos.
Alguns exemplos dessas funções:
```
print(“Olá, mundo!”)
``````
frutas = [“maçã”, “banana”, “uva”]
print(len(frutas)) # Saída: 3
``````
# Tipo inteiro
print(type(42)) # Saída: <class ‘int’>
# Tipo string
print(type(“Python”)) # Saída: <class ‘str’>
``````
notas = [8, 7.5, 9, 10]
print(sum(notas)) # Saída: 34.5
```* `input()` - Permite capturar informações digitadas pelo usuário.
```
nome = input(“Digite seu nome: ”)
print(f”Olá, {nome}!”)
```Esses são apenas alguns exemplos, mas o Python possui dezenas de funções integradas prontas para uso. Você pode consultar a lista completa na documentação de funções embutidas do Python.
Funções lambda são funções anônimas, ou seja, não possuem um nome definido. Elas são usadas para criar pequenas funções de forma mais compacta, geralmente em situações em que você precisa realizar uma operação mais simples, sem necessidade de definir uma função completa com `def`.
A sintaxe é bem direta:
```
lambda argumentos: expressão
```Por exemplo, se quisermos criar uma função que dobra um número, poderíamos escrever:
```
dobrar = lambda x: x * 2
print(dobrar(5)) # Saída: 10
```Aqui, `lambda x: x * 2` cria uma função que recebe um parâmetro `x` e retorna o resultado da multiplicação por 2.
As funções lambda são úteis por sua simplicidade e por permitirem definir comportamentos rápidos. Elas são muito usadas em conjunto com outras funções que recebem funções como argumentos, como `map()`, `filter()` e `sorted()`.
São especialmente úteis para:
Por exemplo, se quisermos ordenar uma lista de tuplas pelo segundo elemento, podemos fazer isso com uma função lambda:
```
pares = [(1, 3), (2, 1), (4, 2)]
ordenado = sorted(pares, key=lambda x: x[1])
print(ordenado) # Saída: [(2, 1), (4, 2), (1, 3)]
```Mas é importante lembrar: se o comportamento for complexo ou precisar ser reutilizado várias vezes, prefira usar uma função comum com `def`. Assim, o código fica mais legível e fácil de manter.
A recursão é uma técnica em que a função chama a si mesma para resolver um problema. Esse conceito pode parecer estranho no início, mas é muito útil para situações em que um problema pode ser dividido em partes menores de forma repetitiva, como cálculos matemáticos, percorrer estruturas de dados ou resolver problemas em etapas.
Em outras palavras, a recursão é uma forma de fazer com que uma função repita um processo até alcançar uma condição de parada. Essa condição é essencial para evitar que a função se chame infinitamente.
Um exemplo clássico é o cálculo de fatorial de um número:
```
def fatorial(n):
if n == 1:
return 1
else:
return n * fatorial(n - 1)
print(fatorial(5)) # Saída: 120
```Nesse código, a função `fatorial()` chama a si mesma com o valor de `n - 1` até que `n` seja igual a 1. Quando isso acontece, o processo “volta” resolvendo cada multiplicação pendente, resultando no fatorial completo.
Então, ao chamar `fatorial(5)` o Python executa internamente:
```
5 * 4 * 3 * 2 * 1 = 120
```No entanto, é um recurso que deve ser usado com cuidado, funções recursivas mal planejadas podem gerar loops infinitos ou consumir muita memória, causando um erro de _recursion limit_.
Criar funções é uma parte importante da programação, mas escrever funções de forma organizada ajuda a tornar o código mais legível, reutilizável e fácil de manter. Seguir algumas orientações garante que suas funções sejam claras e funcionais, facilitando o entendimento e a manutenção, mesmo quando outras pessoas (ou você no futuro) precisarem trabalhar com o código.
Seguindo essas práticas, suas funções se tornam mais claras e seguras, permitindo que programas mais complexos sejam construídos e mantidos de forma eficiente.
As _docstrings_ são cadeias de texto usadas para documentar funções, classes e módulos em Python. Elas servem para explicar o que determinado trecho faz, quais parâmetros recebe e o que retornar. Essa documentação é escrita logo após a definição da função, dentro de três aspas duplas (`””” “””`).
Por exemplo:
```
def saudacao(nome):
"""
Exibe uma mensagem de saudação personalizada.
Parâmetros:
nome (str): Nome da pessoa a ser saudada.
"""
print(f"Olá, {nome}!")
```Nesse exemplo, a _docstring_ descreve o propósito da função `saudacao` e explica o parâmetro utilizado.
As _docstrings_ não interferem na execução do código, mas são muito úteis para quem vai ler ou dar manutenção em um projeto. Elas podem ser acessadas durante a execução do programa usando a função `help()` ou o atributo `.__doc__`, o que torna a documentação parte integrante do próprio código.
Por exemplo:
```
help(saudacao)
# ou
print(saudacao.__doc__)
```Isso exibirá no terminal o conteúdo da __docstring__, facilitando a compreensão da função sem precisar abrir o código-fonte.
Dominar o uso de funções é um passo fundamental para quem quer evoluir na programação com Python. Elas estão presentes em praticamente todos os projetos, desde scripts até sistemas complexos, e compreender bem como criá-las e aplicá-las eleva a qualidade e a eficiência do código no dia a dia de quem desenvolve
Se você quer aprofundar seus conhecimentos e aprender a usar funções, uma excelente opção é seguir a nossa Carreira em Desenvolvimento Back-End Python.
Essa trilha foi criada para guia o aprendizado de forma estruturada, começando pelos fundamentos da linguagem e avançando até a construção de aplicações web, APIs e microsserviços. Ao longo do percurso, você vai:
Se o seu objetivo é aprender na prática, ganhar confiança e entender como aplicar funções em projetos, essa é a oportunidade perfeita para iniciar seu caminho.
Funções são blocos de código que executam uma tarefa específica. Elas ajudam a organizar seu programa em partes menores, evitam a repetição de código e tornam o desenvolvimento mais eficiente. Funções podem ser reutilizadas, receber dados (parâmetros) e retornar resultados.
Elas tornam o código mais organizado e fácil de entender, além de oferecerem flexibilidade para ajustar ou expandir funcionalidades. Funções também simplificam resolução de problemas complexos, dividindo-os em etapas menores e testáveis.
Existem três categorias principais:
Parâmetros são as variáveis listadas na definição da função que representam os dados esperados. Por exemplo, em `def saudacao(nome):`, `nome` é o parâmetro. Argumentos são os valores reais que você passa para a função quando a chama. Por exemplo, em `saudacao(“Maria”)`, `”Maria”` é o argumento.
Argumentos nomeados são passados para a função usando o nome do parâmetro. Isso permite que você ignore a ordem dos parâmetros na chamada da função. Por exemplo,`apresentar_pessoa(idade=40, nome="Henrique")` funciona mesmo que o parâmetro `nome` venha antes de `idade` na definição da função.
Funções lambda são pequenas funções anônimas (sem nome) criadas em uma única linha, ideais para operações simples. A sintaxe é `lambda argumentos: expressão`. Elas são usadas para evitar a criação de uma função completa com `def` para uma tarefa pontual.
Recursão é a técnica onde uma função chama a si mesma para resolver um problema. É útil para problemas que podem ser divididos em partes menores, como o cálculo de um fatorial. A recursão deve ter uma condição de parada para evitar que a função se chame infinitamente.
_Docstrings_ são cadeias de texto usada para documentar funções, classes e módulos. Elas descrevem o propósito, os parâmetros e o que a função retorna. São escritas logo após a definição da função e ajudam a tornar o código mais legível e fácil de manter.