Skip to content

Aprenda funções em Python

    Funções em Python

    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”;

    Tags:

    Leave a Reply

    Your email address will not be published. Required fields are marked *