Skip to content

Commit

Permalink
feat: continuidade capítulo funções
Browse files Browse the repository at this point in the history
  • Loading branch information
HenriqueAJNB committed Sep 11, 2024
1 parent 69d284e commit e90d731
Showing 1 changed file with 55 additions and 45 deletions.
100 changes: 55 additions & 45 deletions book/08-funcoes/01-introducao.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -199,17 +199,9 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3.0\n"
]
}
],
"outputs": [],
"source": [
"def calcula_media(valores):\n",
" return sum(valores) / len(valores)\n",
Expand All @@ -232,17 +224,9 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"As médias são, respectivamente, 3.0, 63.8 e 663.0\n"
]
}
],
"outputs": [],
"source": [
"def calcula_media(valores):\n",
" return sum(valores) / len(valores)\n",
Expand Down Expand Up @@ -275,25 +259,13 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": null,
"metadata": {
"tags": [
"raises-exception"
]
},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'x' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[3], line 5\u001b[0m\n\u001b[0;32m 2\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m10\u001b[39m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mA variável x dentro da função é \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mx\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m----> 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mx\u001b[49m)\n",
"\u001b[1;31mNameError\u001b[0m: name 'x' is not defined"
]
}
],
"outputs": [],
"source": [
"def exemplo_escopo_local():\n",
" x = 10\n",
Expand All @@ -316,18 +288,9 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A variável x dentro da função é 10\n",
"A variável x fora da função é 20\n"
]
}
],
"outputs": [],
"source": [
"x = 20 # variável definida no escopo global\n",
"\n",
Expand Down Expand Up @@ -359,6 +322,53 @@
"Evite ao máximo usar variáveis globais dentro de funções! Se você precisar de um valor de fora da função, passe esse valor como parâmetro. Isso torna o código mais legível e menos propenso a erros.\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dicas de tipo (type hints)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notem que, na função acima `calcula_media` que criamos anteriormente, é difícil dizer quais são os tipos de dados que a função espera como argumento e qual é o tipo de dado que ela retorna. Isso pode ser um problema se você estiver trabalhando em um projeto grande e complexo, ou se você estiver trabalhando em equipe. Para resolver isso, o Python permite que você adicione dicas de tipo, chamadas de *type hints*, para indicar quais são os tipos de dados esperados e retornados pela função.\n",
"\n",
"Infelizmente *type hints* são apenas dicas mesmo, e o Python não vai reclamar se você passar um tipo de dado diferente do esperado. Mas, ainda sim, é uma boa prática adicionar essas dicas para ajudar a entender o código. Vamos ver como fazer isso:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def calcula_media(valores: list[int | float]) -> float:\n",
" return sum(valores) / len(valores)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A função acima indica o tipo do parâmetro `valores` como uma lista de números inteiros ou floats através da notação `: list[int | float]` logo na sequencia do nome do parâmetro. Já a notação `-> float` indica que a função retorna um número float (o que faz sentido pois a média pode ser um número quebrado). \n",
"\n",
"Porém, como disse anteriormente, o Python não vai reclamar se você passar um tipo de dado diferente do esperado. Essa função fica um pouco mais claro em termos de tipos de dados (desde que informados corretamente) e pode ajudar a entender melhor o código.\n",
"\n",
"Podemos anotar qualquer parâmetro da função, bem como seu(s) retorno(s). As notações a princípio seguem os tipos básicos que vimos até agora:\n",
"\n",
"- `int`: número inteiro\n",
"- `float`: número de ponto flutuante\n",
"- `str`: string\n",
"- `list`: lista\n",
"- `tuple`: tupla\n",
"- `dict`: dicionário\n",
"- `set`: conjuntos\n",
"\n",
"Para as sequências como `list`, `tuple` e `set`, é possível indicar o tipo de dado que a sequência contém, como fizemos no exemplo acima, usando `list[int | float]` para indicar que a lista contém números inteiros ou floats. No caso de diciários, é possível indicar o tipo de dado da chave e do valor, como `dict[str, int]` para indicar um dicionário onde a chave é uma string e o valor é um inteiro."
]
}
],
"metadata": {
Expand Down

0 comments on commit e90d731

Please sign in to comment.