# Funções

# 🗃️ O que é uma Função?
O python tem varias aplicações, e entre elas, está a área de 👨🏻‍💻desenvolvimento web, imagina que vocês escolheu trilhar essa área, e no seu primeiro App, você quer dar um cupom de R$ 50 🤑 para os primeiros 100 usuários. Você não iria criar um bloco de código para cada usuário, imagina o tanto de trabalho (é uma explicação grosseira, me desculpem desenvolvedores web). E aí que entra o papel de uma **função**, 

> uma função permite ♻️reutilizar código o tanto que vezes que for necessário.

Para qualquer área que for, seja, ciência de dados, machine learning, IoT, desenvolvimento web, big data, 🐱‍💻 entre outros, você vai precisar criar funções.
Funções são fundamentais para a organização do código, permitindo dividir um programa complexo em partes menores e mais gerenciáveis. Elas também promovem a reutilização de código, já que uma função pode ser 🛎️chamada várias vezes em lugares diferentes do programa. Além disso, facilitam a compreensão do código, pois isolam a lógica específica de uma tarefa em blocos nomeados.

## 🧩Como criar uma função
Ela é definida usando a palavra-chave `def` seguida pelo nome da função, parâmetros entre parênteses e um bloco de código indentado(ou seja, precisa ter 4 espaços, ou da um `TAB` para não ficar na mesma direção da função) que contém as instruções a serem executadas quando a função é chamada.

```python
def cupom_presente(nome):
    print(f"Olá {nome}, parabéns você acabou de ganhar um cupom de R$50")

```
Uma função pode conter algum parâmetro ou não, no anterior exemplo, entre o parêntese foi declarado um parâmetro (pode ser qualquer palavra, minúsculas), o que significa que essa função precisa de uma entrada.
Para ficar melhor ainda, vamos perguntar pelo nome do usuário.
```python
nome_usuario = input("Digite seu nome: ") # essa variável vai guardar o nome

# chamando a função
cupom_presente(nome_usuario)

```

`Digite seu nome: > Joãozinho`</br>
`> Olá Joãozinho, parabéns você acabou de  ganhar um cupom de R$50`

Se você está acompanhando, sabe que no Python usa-se muitas funções que vêm por padrão, como é o caso do `print()`, uma das funções mais usadas no python.
Dá uma olhada nesse arquivo no 👉[Google Colab](https://colab.research.google.com/drive/1nbM2KDkY1nOERWkuVppmkifaBX1XiV5m?usp=sharing).

## 🧮Funções Matemáticas
O python tem módulos que ajudam nos cálculos matemáticos. Um módulo é um arquivo que contém uma coleção de funções. E para utilizar esses módulos é preciso importá-los da seguinte forma.

```python
 # import ,palavra-chave para importar bibliotecas
import math

#se chamar o módulo math, você verá algumas informações dele.
math
```
`><module 'math' (built-in)>`

Os módulos contêm funções e variáveis definas dentro dele. E para acessá-lo, é só utilizar o nome do módulo e o nome da função separado por um ponto (Isso chama-se ***dot notation***).
```python
radianos = 0.7
altura = math.sin(radianos) #módulo + nome da função
print(altura)
```
`>0.644217687237691`

## 🔀Composição
Uma das características das linguagens de programação é a capacidade de criar pequenos blocos e combiná-los.
```python
# uma função dentro de outra função
angulo = 45
x = math.sin(angulo / 360 * 2 * math.pi)
print(x)
```
`>0.7071067811865475`

Mais exemplos veja 👉[aqui](https://colab.research.google.com/drive/1PbDWa9_o_Fe5wScnDB1dA5jtcqQC0zC4?usp=sharing)

