Uma função permite que você defina um bloco de código reutilizável que pode ser executado muitas vezes em seu programa.
As funções permitem criar soluções mais modulares e [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) para problemas complexos.
Embora o Python já forneça muitas funções internas, como `print()` e `len()` , você também pode definir suas próprias funções para usar em seus projetos.
Uma das grandes vantagens de usar funções em seu código é que ele reduz o número geral de linhas de código em seu projeto.
### Sintaxe
No Python, uma definição de função possui os seguintes recursos:
Funções são blocos de código que podem ser reutilizados simplesmente ao realizar o chamado da função. Isso permite a reutilização de código de forma simples e elegante sem reescrever explicitamente seções de código. Isso torna o código mais legível, facilita a depuração e limita os erros de digitação.
Funções em Python são criadas usando a palavra-chave `def` , seguida por um nome de função e parâmetros de função dentro de parênteses.
Uma função sempre retorna um valor. A palavra-chave `return` é usada pela função para retornar um valor, se você não quiser retornar nenhum valor, o valor padrão `None` será retornado.
O nome da função é usado para chamar a função, passando os parâmetros necessários dentro de parênteses.
```python
# this is a basic sum function
def sum(a, b):
return a + b
result = sum(1, 2)
# result = 3
```
Você pode definir valores padrão para os parâmetros, assim o Python irá interpretar que o valor desse parâmetro é o padrão se nenhum for dado.
```python
def sum(a, b=3):
return a + b
result = sum(1)
# result = 4
```
Você pode passar os parâmetros na ordem desejada, usando o nome do parâmetro.
```python
result = sum(b=2, a=2)
# result = 4
```
No entanto, não é possível passar um argumento de palavra-chave antes de um argumento de não-palavra-chave
```Python
result = sum(3, b=2)
#result = 5
result2 = sum(b=2, 3)
#Will raise SyntaxError
```
As funções também são Objetos, então você pode atribuí-las a uma variável e usar essa variável como uma função.
```python
s = sum
result = s(1, 2)
# result = 3
```
### Notas
* Se uma definição de função incluir parâmetros, você deverá fornecer o mesmo número de parâmetros quando chamar a função.
\-Python interpreta o bloco de função somente quando a função é chamada e não quando a função é definida. Assim, mesmo que o bloco de definição de função contenha algum tipo de erro, o interpretador de python mostrará isso apenas quando a função for chamada.