Funções

Funções são blocos de programas que permitem ao usuário deixar o programa mais legível e expansível.

Abaixo é apresentando um exemplo de programa que faz uso de funções:

Em Python, a função é definida através da palavra reservada def, seguido por:

  • O nome da função: o nome da função segue as mesmas regras das variáveis: deve-se utilizar letras, números ou sublinhado, mas o nome não pode começar com um número. Também não puder ser uma palabra reservada do Python.
  • Uma lista de parâmetros: a lista de parâmetro fica dentro dos parentêse, separado por vírgula. Algumas funções não tem parâmetros, nesse caso, dentro dos parentêses não é inserido nada.
  • Dois pontos ":": que termina a definição da função.
  • O bloco de comandos: recuado em relação a linha anterior, vão os comandos contidos na função, podendo retornar valores ou não.

O simples fato de ter criado uma função não significa que ela será executada.

A devida chamada a função irá garantir a execução da função

Chamando uma Função

Para que uma função seja executada, deverão serem feitas chamadas a essa função, para isso, simplemente devemos inserir o nome da função com os parâmetros definidos na sua criação:

Os argumentos são passados para a função e devem ter a correspondência de quantidade respeitada. Quando a função é chamada, os parâmetros são passados para a função que recebe os valores.

Passagem de Parâmetros

Os parâmetros permitem que você passe informações para uma função, permitindo maior flexibilidade e reutilização do código.

Definindo Parâmetros em Funções

No exemplo acima, a função saudacao possui um parâmetro nome. Ao chamar a função e fornecer um argumento, o valor do argumento é atribuído ao parâmetro e utilizado dentro da função.

Passagem de Parâmetros

Existem dois tipos principais de passagem de parâmetros em funções: passagem por valor e passagem por referência.

Passagem por Valor

Em Python, os argumentos são passados por valor. Isso significa que, quando você chama uma função e passa um argumento, uma cópia do valor desse argumento é passada para a função. Qualquer modificação feita dentro da função não afeta o valor original fora da função.

Neste exemplo, temos uma função chamada incrementar que recebe um parâmetro numero. Dentro da função, incrementamos o valor do numero em 1. No entanto, quando imprimimos o valor antes e depois de chamar a função, percebemos que o valor original não foi alterado. Isso ocorre porque o argumento foi passado por valor.

Passagem por Referência

Em alguns casos, você pode querer passar um argumento por referência, o que significa que as modificações feitas dentro da função afetam o valor original fora da função. Embora Python não suporte a passagem por referência direta, podemos simular esse comportamento passando objetos mutáveis, como listas ou dicionários.

Neste exemplo, temos uma função chamada adicionar_elemento que recebe uma lista e um elemento. Dentro da função, adicionamos o elemento à lista usando o método append(). Quando imprimimos a lista antes e depois de chamar a função, vemos que o valor original foi modificado. Isso ocorre porque listas são objetos mutáveis e a função está operando na referência da lista.

É importante ter em mente que a passagem por referência em Python é limitada a objetos mutáveis. Objetos imutáveis, como números inteiros ou strings, são passados por valor, ou seja, uma cópia do valor é passada para a função.

A Chamada if __name__ == '__main__'

A chamada if __name__ == '__main__' é uma construção comum em Python que permite executar um determinado bloco de código somente quando o arquivo é executado diretamente, e não quando é importado como um módulo por outro arquivo.

Isso é útil quando você tem um arquivo Python que contém tanto definições de funções quanto código que você gostaria de executar como um script independente. A chamada if __name__ == '__main__' permite que você diferencie entre a execução direta do arquivo e a importação do mesmo como um módulo.

A estrutura básica da chamada if __name__ == '__main__' é apresetnada a seguir:

No exemplo acima, temos uma função chamada minha_funcao e um bloco de código que será executado apenas quando o arquivo for executado diretamente. Esse bloco de código pode conter chamadas de função, instruções de impressão ou qualquer outra lógica que você queira executar quando o arquivo é executado como um script independente.