# Suas próprias funções

Se lembra de funções como len() que você pode executar no Python? Bem, boas notícias, agora você vai aprender a escrever suas próprias funções!

Uma função é uma sequência de instruções que o Python deve executar. Cada função em Python começa com a palavra-chave def, seguido de um nome para a função e opcionalmente uma lista de parâmetros. Vamos começar com uma função simples. Substitua o código no python\_intro.py com o seguinte:

```
def oi():
    print('Olá!')
    print('Como vai você?')
oi()
```

Ok, nossa primeira função está pronta!

Você pode se perguntar por que escrevemos o nome da função na parte inferior do arquivo. Isto é porque Python lê o arquivo e executa de cima para baixo. Então, para usar a nossa função, temos de escrevê-lo na parte inferior.

Vamos executa-lo agora e ver o que acontece:

```
$ python3 python_intro.py
Olá!
Como vai você?
```

Isso foi fácil! Vamos construir nossa primeira função com parâmetros. Usaremos o exemplo anterior - uma função que diz 'hi' para quem o executa - com um name:

```
def oi(nome):
```

Como você pode ver, agora demos um parâmetro chamado nome para nossa função:

```
def oi(nome):
    if nome == 'Ola':
        print('Oi Ola!')
    elif nome == 'Sonja':
        print('Oi Sonja!')
    else:
        print('Oi anônimo!')

oi()
```

Como você pode ver, nós precisamos colocar dois espaços antes da função print, porque if precisa saber o que deve acontecer quando a condição for atendida. Vamos ver como isso funciona agora:

```
$ python3 python_intro.py
Traceback (most recent call last):
File "python_intro.py", line 10, in <module>
  oi()
TypeError: oi() missing 1 required positional argument: 'nome'
```

Oops, um erro. Felizmente, Python nos fornece uma mensagem de erro bastante útil. Ela diz que a função oi() (aquela que declaramos) tem um argumento obrigatório (chamado nome) e que nós esquecemos de passá-lo ao chamar a função. Vamos corrigi-lo na parte inferior do arquivo:

```
oi("Ola")
```

e execute novamente:

```
$ python3 python_intro.py
Oi Ola!
```

E se mudarmos o nome?

```
oi("Sonja")
```

e executá-lo:

```
$ python3 python_intro.py
Oi Sonja!
```

Agora, o que acha que vai acontecer se você escrever outro nome lá? (Sem ser Ola ou Sonja). Experimente e veja se você está certo. Ele deve imprimir isto:

```
Oi anonimo!
```

Isto é incrível, não? Dessa maneira você não precisa se repetir (DRY - don't repeat yourself, ou em português, não se repita) cada vez que for mudar o nome da pessoa que a função pretende cumprimentar. E é exatamente por isso que precisamos de funções - você nunca quer repetir seu código!

Vamos fazer algo mais inteligente..--existem mais que dois nomes, e escrever uma condição para cada um seria difícil, certo?

```
def oi(nome):
    print('Oi ' + nome + '!')
oi("Maria")
```

Vamos chamar o código agora:

```
$ python3 python_intro.py
Oi Maria!
```

Parabéns! Você acabou de aprender a criar funções :)!
