Python é uma linguagem de programação versátil que oferece uma ampla gama de recursos para escrita de funções. Neste artigo, iremos explorar 15 níveis diferentes de funções Python, desde as mais simples até as mais complexas. Prepare-se para uma jornada que vai desde o fácil até o incrivelmente complexo!
1) Funções Básicas sem Argumentos
Começamos pelo básico – funções que não recebem argumentos e realizam uma tarefa simples e invariável.
pythonCopy codedef saudacao():
print('Olá')
print('mundo')
saudacao()
# Olá
# mundo
Essa é a função mais simples que você pode criar, pois não recebe nenhum argumento e executa uma tarefa fixa.
2) Funções que Recebem 1 Argumento
Agora, avançamos para funções que recebem um único argumento e realizam uma operação com ele.
pythonCopy codedef soma10(n):
return n + 10
print(soma10(4)) # 14
print(soma10(5)) # 15
Essa função recebe um único argumento e adiciona 10 a ele.
3) Funções que Recebem 2 ou Mais Argumentos
Podemos criar funções que aceitam qualquer número de argumentos.
pythonCopy codedef soma(a, b):
return a + b
print(soma(10, 4)) # 14
print(soma(100, 5)) # 105
def media(a, b, c):
return (a + b + c) / 3
print(media(1, 2, 3)) # 2.0
print(media(3, 4, 6)) # 4.333333333
Essas funções podem ser flexíveis e aceitar quantos argumentos forem necessários.
4) Funções com Parâmetros Padrão/Opicionais
Podemos definir parâmetros padrão ou opcionais em nossas funções.
pythonCopy codedef saudacao(nome, cumprimento='Olá'):
print(cumprimento, nome)
saudacao('tim', 'hola') # hola tim
saudacao('tim') # Olá tim
Neste exemplo, ‘cumprimento’ é um parâmetro opcional. Se não fornecermos um valor, ele assume o valor padrão ‘Olá’.
5) Funções Lambda
As funções lambda são funções anônimas de uma única linha, úteis para tarefas simples.
pythonCopy codesoma10 = lambda x: x + 10
adicao = lambda a, b: a + b
As funções lambda são concisas e podem ser usadas quando necessário, sem a necessidade de defini-las previamente.
6) Funções Recursivas
Funções recursivas são aquelas que chamam a si mesmas durante a execução.
pythonCopy codedef fatorial(n):
if n == 1:
return 1
return n * fatorial(n-1)
print(fatorial(5)) # 120
Nesse exemplo, a função fatorial chama a si mesma, tornando-a uma função recursiva.
7) Métodos em Classes
Métodos são funções que existem dentro de classes ou objetos.
pythonCopy codeclass Cachorro:
def latir(self):
print('au au')
cachorro = Cachorro()
cachorro.latir() # au au
Um método é uma função definida dentro de uma classe e opera em instâncias dessa classe.
8) Métodos Mágicos
Métodos mágicos são funções especiais com comportamento específico.
pythonCopy codeclass Cachorro:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def __str__(self):
return f'Cachorro(nome={self.nome}, idade={self.idade})'
cachorro = Cachorro('rocky', 4)
print(cachorro) # Cachorro(nome=rocky, idade=4)
Esses métodos começam e terminam com dois underscores e têm comportamentos especiais, como __init__
para inicialização de objetos e __str__
para representação de string.
9) Funções com *args
– Aceitando um Número Variável de Argumentos Posicionais
Podemos criar funções que aceitam qualquer número de argumentos posicionais.
pythonCopy codedef teste(*args):
print(args)
teste() # ()
teste(1) # (1,)
teste(1, 2) # (1, 2)
teste(1, 2, 3) # (1, 2, 3)
teste(1, 2, 3, 4) # (1, 2, 3, 4)
O *args
permite passar um número variável de argumentos posicionais para a função, que são então armazenados em uma tupla.
10) Funções com **kwargs
– Aceitando um Número Variável de Argumentos de Palavras-chave
Podemos criar funções que aceitam qualquer número de argumentos de palavras-chave.
pythonCopy codedef teste(**kwargs):
print(kwargs)
teste() # {}
teste(a=1) # {'a': 1}
teste(a=1, b=2) # {'a': 1, 'b': 2}
teste(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
teste(a=1, b=2, c=3, d=4) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
O **kwargs
permite passar um número variável de argumentos de palavras-chave para a função, que são então armazenados em um dicionário.
11) Funções com *args
e **kwargs
Podemos criar funções que aceitam ambos *args
e **kwargs
.
pythonCopy codedef teste(*args, **kwargs):
print(f'{args} {kwargs}')
teste() # () {}
teste(1, 2, 3) # (1, 2, 3) {}
teste(a=1, b=2, c=3) # () {'a': 1, 'b': 2, 'c': 3}
teste(1, 2, a=3, b=4) # (1, 2) {'a': 3, 'b': 4}
Essa flexibilidade permite que as funções aceitem argumentos posicionais e de palavras-chave em qualquer combinação.
12) Funções Geradoras
Funções geradoras usam a palavra-chave yield
em vez de return
e podem ter várias saídas.
pythonCopy codedef gerar_1_a_3():
yield 1
yield 2
yield 3
for i in gerar_1_a_3():
print(i)
# 1
# 2
# 3
def gerar_quadrados(inicio, fim):
for i in range(inicio, fim+1):
yield i**2
for i in gerar_quadrados(1, 5):
print(i)
# 1
# 4
# 9
# 16
# 25
As funções geradoras permitem que você produza valores sob demanda, economizando memória.
13) Funções de Ordem Superior
Funções de ordem superior são aquelas que podem receber ou retornar outras funções.
pythonCopy codedef adicionar10(n):
return n + 10
def aplicar_a_lista(lista, funcao):
resultado = []
for n in lista:
resultado.append(funcao(n))
return resultado
lista = aplicar_a_lista([1, 2, 3], adicionar10)
# lista = [11, 12, 13]
Funções de ordem superior podem ser usadas para criar funcionalidades mais complexas, permitindo que as funções sejam tratadas como dados.
14) Decoradores – Um Tipo Especial de Função de Ordem Superior
Decoradores são funções de ordem superior especiais que modificam outras funções.
pythonCopy codedef adicionar_ponto_exclamacao(sua_funcao):
def funcao_decoradora(*args, **kwargs):
return sua_funcao(*args, **kwargs) + '!'
return funcao_decoradora
@adicionar_ponto_exclamacao
def saudacao(nome):
return f'Olá {nome}'
print(saudacao('tom')) # Olá tom!
Decoradores são usados para adicionar funcionalidades adicionais às funções existentes sem modificá-las diretamente.
15) Funções Decoradoras Avançadas
Funções decoradoras podem ser personalizadas para adicionar diferentes símbolos ou funcionalidades.
pythonCopy codedef adicionar_simbolo(simbolo):
def funcao_decoradora(sua_funcao):
def wrapper(*args, **kwargs):
return sua_funcao(*args, **kwargs) + simbolo
return wrapper
return funcao_decoradora
@adicionar_simbolo('!')
def saudacao(nome):
return f'Olá {nome}'
print(saudacao('tom')) # Olá tom!
Esses exemplos mostram como você pode criar funções decoradoras personalizadas para adicionar comportamentos específicos às funções existentes.
Conclusão
Neste artigo, exploramos 15 níveis diferentes de funções em Python, desde as mais simples até as mais complexas. A versatilidade das funções Python permite que você escolha o nível de complexidade necessário para resolver qualquer problema. Espero que este artigo tenha sido útil e informativo!
Outras Referências
Desafios de Programação em Python para Testar Suas Habilidades
Exercícios
1.Qual a diferença de variáveis locais para variáveis globais?
2.É possível que uma variável que a princípio seja local se torne global?
3.Faça um programa que calcula a raiz quadrada de um número; Chame-a de sqrt;
4.Escreva uma função que estima o valor de pi utilizando a fórmula de Ramanujan; Dica: utilize um while e utilize math.pi;
5.Faça uma função que sorteie um número de 1 a 100 e peça ao usuário um número. Se for o que o computador sorteou escrever: “Você venceu”, senão escreva: “A banca sempre ganha”;