1 00:00:07,965 --> 00:00:10,824 A gente deu nosso primeiro passo no reaproveitamento de código 2 00:00:10,824 --> 00:00:13,690 com as funções e entendeu também como usar os parâmetros. 3 00:00:13,690 --> 00:00:15,392 Mas agora está na hora da gente dar uma olhada 4 00:00:15,392 --> 00:00:17,971 em um outro tipo de parâmetro que permite que a gente informe dados 5 00:00:17,971 --> 00:00:20,550 de uma forma um pouco diferente. 6 00:00:20,550 --> 00:00:23,270 Está na hora da gente olhar um pouco os args. 7 00:00:23,270 --> 00:00:25,179 A gente já sabe que as funções servem para que a gente isole 8 00:00:25,179 --> 00:00:28,017 e reaproveite o código, 9 00:00:28,017 --> 00:00:30,855 e que a gente também pode informar parâmetros para elas. 10 00:00:30,855 --> 00:00:32,725 Não há necessariamente uma quantidade limite 11 00:00:32,725 --> 00:00:34,632 de parâmetros que a gente pode informar, 12 00:00:34,632 --> 00:00:36,826 desde que a gente especifique eles corretamente 13 00:00:36,826 --> 00:00:39,020 na assinatura do método. 14 00:00:39,020 --> 00:00:39,986 E calma. 15 00:00:39,986 --> 00:00:41,538 Quando a gente fala assinatura do método, 16 00:00:41,538 --> 00:00:43,223 a gente está basicamente falando daquela primeira linha, 17 00:00:43,223 --> 00:00:47,410 aonde a gente define o nome e os parâmetros da função, 18 00:00:47,410 --> 00:00:51,630 que, por acaso, a gente pode especificar quantos a gente quiser. 19 00:00:51,630 --> 00:00:53,643 Basta que a gente coloque os seus nomes adequados. 20 00:00:53,643 --> 00:00:55,721 Por exemplo, nome, idade ou qualquer outra informação 21 00:00:55,721 --> 00:01:00,180 que a gente queira usar dentro daquela função. 22 00:01:00,180 --> 00:01:01,684 E, lembra, o nome que a gente colocar na assinatura 23 00:01:01,684 --> 00:01:06,390 é como a gente vai referenciá-las dentro do bloco da função. 24 00:01:06,390 --> 00:01:08,330 Na maioria dos casos, a gente vai ter bem claro 25 00:01:08,330 --> 00:01:10,134 quais são as informações que a gente precisa 26 00:01:10,134 --> 00:01:12,112 para executar um determinado bloco de código 27 00:01:12,112 --> 00:01:14,090 dentro de uma função. 28 00:01:14,090 --> 00:01:15,920 E isso, na verdade, é a regra. 29 00:01:15,920 --> 00:01:18,006 A gente precisa saber quais são as informações 30 00:01:18,006 --> 00:01:21,075 para que a gente saiba como lidar com elas dentro do código. 31 00:01:21,075 --> 00:01:23,667 Mas existem alguns cenários em que, 32 00:01:23,667 --> 00:01:26,260 embora a gente saiba quais informações a gente precisa, 33 00:01:26,260 --> 00:01:29,410 a gente não sabe exatamente quantas informações vão vir. 34 00:01:29,410 --> 00:01:33,110 E calma, eu sei que está um pouco confuso, mas você já já vai entender. 35 00:01:33,110 --> 00:01:35,582 Imagina que você tem uma função que tem que receber um nome 36 00:01:35,582 --> 00:01:38,055 e exibir uma mensagem com esse nome. 37 00:01:38,055 --> 00:01:40,450 Está bem claro aqui como é que as coisas vão funcionar. 38 00:01:40,450 --> 00:01:43,090 Dentro dos parâmetros, a gente vai ter uma variável que representa o nome 39 00:01:43,090 --> 00:01:45,730 e a gente vai usar ela dentro da nossa função. 40 00:01:45,730 --> 00:01:46,738 Simples. 41 00:01:46,738 --> 00:01:50,380 Por outro lado, imagina que a gente vai calcular alguma média. 42 00:01:50,380 --> 00:01:52,510 A gente sabe como é feito o cálculo de média. 43 00:01:52,510 --> 00:01:55,701 A gente soma, por exemplo, todas as notas de um aluno 44 00:01:55,701 --> 00:01:59,410 e divide essa somatória pela quantidade de notas totais. 45 00:01:59,410 --> 00:02:00,492 A gente pode, sem problema nenhum, 46 00:02:00,492 --> 00:02:03,740 implementar uma função que recebe dois valores. 47 00:02:03,740 --> 00:02:06,018 A gente vai, então, pegar esses valores, somar, 48 00:02:06,018 --> 00:02:08,920 e o que der de resultado, a gente divide por dois. 49 00:02:08,920 --> 00:02:10,212 Mas pensa aqui comigo. 50 00:02:10,212 --> 00:02:11,504 A gente está trabalhando com Python, 51 00:02:11,504 --> 00:02:14,145 e diversas possibilidades estão na palma da nossa mão. 52 00:02:14,145 --> 00:02:16,212 Então, por que, ao invés de a gente implementar uma função 53 00:02:16,212 --> 00:02:20,465 que lida com duas notas, a gente implementa uma função 54 00:02:20,465 --> 00:02:21,557 que lida com qualquer quantidade de notas 55 00:02:21,557 --> 00:02:22,650 que a gente quiser informar? 56 00:02:22,650 --> 00:02:23,860 Vamos lá, então. 57 00:02:23,860 --> 00:02:25,900 Aqui no VS Code, a gente já tem um código inicial, 58 00:02:25,900 --> 00:02:28,450 que é aquele nosso primeiro exemplo que a gente comentou. 59 00:02:28,450 --> 00:02:31,026 A gente tem uma função simples, que recebe um parâmetro, 60 00:02:31,026 --> 00:02:33,520 e ele é usado aqui para montar alguma mensagem. 61 00:02:33,520 --> 00:02:35,222 Se a gente exibir aqui o nosso código, 62 00:02:35,222 --> 00:02:37,040 ou melhor, executar o nosso código, 63 00:02:37,040 --> 00:02:40,030 a gente consegue ver que a mensagem é exibida com sucesso, 64 00:02:40,030 --> 00:02:42,830 e na invocação da função, a gente passa apenas um parâmetro, 65 00:02:42,830 --> 00:02:45,630 que no nosso caso é o valor mundo. 66 00:02:45,630 --> 00:02:47,760 Olha o que acontece se a gente tentar passar aqui, por exemplo, 67 00:02:47,760 --> 00:02:49,890 um outro valor. 68 00:02:49,890 --> 00:02:52,610 Por exemplo, aluno, que é uma outra string. 69 00:02:52,610 --> 00:02:54,815 Repara que o Python dá um erro, 70 00:02:54,815 --> 00:02:56,992 porque a gente especificou que essa função recebe 71 00:02:56,992 --> 00:02:59,463 apenas um argumento, ou seja, um parâmetro, 72 00:02:59,463 --> 00:03:01,935 mas dois foram informados. 73 00:03:01,935 --> 00:03:04,505 E é exatamente o que a gente vai querer fazer já já. 74 00:03:04,505 --> 00:03:06,732 Eu vou começar, então, editando o nome dessa função 75 00:03:06,732 --> 00:03:09,410 para que faça mais sentido com o que a gente quer fazer. 76 00:03:09,410 --> 00:03:11,650 Aqui no nosso caso é fazer o cálculo de uma média. 77 00:03:11,650 --> 00:03:14,565 Então eu vou vir aqui e vou editar o nome dela 78 00:03:14,565 --> 00:03:17,480 para ficar calcular média. 79 00:03:17,480 --> 00:03:19,427 E pronto. 80 00:03:19,427 --> 00:03:21,375 Ao invés de um nome, eu vou receber as notas aqui. 81 00:03:21,375 --> 00:03:23,285 E é aqui que vem a chave. 82 00:03:23,285 --> 00:03:26,160 Quando eu especifico os meus parâmetros dessa forma, 83 00:03:26,160 --> 00:03:29,010 eu estou informando para o Python parâmetros posicionais 84 00:03:29,010 --> 00:03:31,860 com uma quantidade específica de itens. 85 00:03:31,860 --> 00:03:33,825 Mas agora a gente vai usar 86 00:03:33,825 --> 00:03:36,842 uma técnica chamada args do Python, que permite que a gente informe para ele 87 00:03:36,842 --> 00:03:39,860 que esse parâmetro é um parâmetro especial 88 00:03:39,860 --> 00:03:43,005 e que vai receber uma quantidade não exata de itens. 89 00:03:43,005 --> 00:03:47,030 E para isso, basta a gente colocar o asterisco aqui no começo do nome. 90 00:03:47,030 --> 00:03:48,256 E pronto. 91 00:03:48,256 --> 00:03:50,375 A partir desse momento, 92 00:03:50,375 --> 00:03:52,495 o Python vai tratar essa variável não como uma variável normal, 93 00:03:52,495 --> 00:03:53,739 mas sim como uma tupla, 94 00:03:53,739 --> 00:03:55,884 que é basicamente uma coleção de itens 95 00:03:55,884 --> 00:03:58,030 que não pode ser alterada. 96 00:03:58,030 --> 00:04:00,430 Então, antes da gente implementar a nossa lógica, 97 00:04:00,430 --> 00:04:04,292 vamos só colocar um print aqui, exibindo o valor dessa variável 98 00:04:04,292 --> 00:04:06,570 que a gente está recebendo nos parâmetros, 99 00:04:06,570 --> 00:04:08,340 para a gente ver a cara dela. 100 00:04:08,340 --> 00:04:11,960 Então, aqui na execução do método, eu vou atualizar o nome também 101 00:04:11,960 --> 00:04:15,310 e eu vou deixar aqueles nossos dois valores, mundo e aluno. 102 00:04:15,310 --> 00:04:16,896 Porque lembra, 103 00:04:16,896 --> 00:04:18,482 o Python é uma linguagem de tipo dinâmico, então, 104 00:04:18,482 --> 00:04:21,710 enquanto a gente não usar os valores como se fossem números, 105 00:04:21,710 --> 00:04:23,540 a gente não vai ter problema nenhum. 106 00:04:23,540 --> 00:04:25,915 Se eu executar novamente aqui o nosso código, 107 00:04:25,915 --> 00:04:28,650 a gente repara que os dois valores estão aqui, 108 00:04:28,650 --> 00:04:30,800 mesmo que em apenas uma variável. 109 00:04:30,800 --> 00:04:32,237 E se a gente quiser, 110 00:04:32,237 --> 00:04:34,383 a gente pode vir aqui e adicionar qualquer outra coisa, 111 00:04:34,383 --> 00:04:36,530 como, por exemplo, aluna. 112 00:04:36,530 --> 00:04:37,638 Se a gente executar, a gente vê que, 113 00:04:37,638 --> 00:04:41,170 mesmo sem alterar a definição da nossa função, 114 00:04:41,170 --> 00:04:42,230 aquele novo valor que a gente formou 115 00:04:42,230 --> 00:04:45,710 está lá dentro também, dentro da nossa tupla. 116 00:04:45,710 --> 00:04:46,675 Então, agora sim, 117 00:04:46,675 --> 00:04:49,510 é hora da gente implementar a nossa lógica do cálculo da média. 118 00:04:49,510 --> 00:04:51,164 Então, para isso, a gente vai vir aqui dentro 119 00:04:51,164 --> 00:04:55,159 e vai começar com uma variável que vai ser, por exemplo, 120 00:04:55,159 --> 00:04:57,420 a soma, que vai começar com zero. 121 00:04:57,420 --> 00:04:59,612 Eu vou implementar isso aqui de uma forma bem simples, 122 00:04:59,612 --> 00:05:01,730 para que a gente entenda como está sendo feito. 123 00:05:01,730 --> 00:05:04,104 Então, eu vou começar executando um loop 124 00:05:04,104 --> 00:05:06,355 para cada item daquela minha tupla. 125 00:05:06,355 --> 00:05:08,500 Lembra? 126 00:05:08,500 --> 00:05:10,645 O for permite que a gente itere sobre vários tipos de dados, 127 00:05:10,645 --> 00:05:11,850 e a tupla é um deles. 128 00:05:11,850 --> 00:05:14,882 Se a gente fizer isso com a tupla, ele vai passar por cada um dos itens, 129 00:05:14,882 --> 00:05:17,854 e a gente vai ter a oportunidade de fazer alguma coisa com esse número. 130 00:05:17,854 --> 00:05:20,550 No nosso caso, eu vou passar dentro das notas. 131 00:05:20,550 --> 00:05:23,430 Para cada nota, eu vou chamar ela de nota, aqui dentro, 132 00:05:23,430 --> 00:05:25,397 e eu vou especificar a minha lista, ou a minha coleção, 133 00:05:25,397 --> 00:05:27,365 que no caso é uma tupla. 134 00:05:27,365 --> 00:05:29,812 E pronto. 135 00:05:29,812 --> 00:05:32,260 Aqui dentro, eu vou basicamente usar o operador de soma, 136 00:05:32,260 --> 00:05:35,610 para fazer com que o soma receba o valor do próprio soma, 137 00:05:35,610 --> 00:05:39,530 mais o valor da minha nota atual, que está dentro do meu loop. 138 00:05:39,530 --> 00:05:40,310 Beleza? 139 00:05:40,310 --> 00:05:41,070 Pronto. 140 00:05:41,070 --> 00:05:44,385 Nesse ponto aqui, a gente já tem a somatória das nossas notas. 141 00:05:44,385 --> 00:05:46,240 Então, para terminar a lógica, basta a gente 142 00:05:46,240 --> 00:05:48,195 fazer a divisão pela quantidade de notas. 143 00:05:48,195 --> 00:05:52,115 Então, eu vou declarar uma outra variável aqui, que vai ser a média. 144 00:05:52,115 --> 00:05:55,645 Ela vai ser basicamente igual à minha soma, 145 00:05:55,645 --> 00:05:59,715 dividida pela quantidade de itens que foram informadas naquela tupla. 146 00:05:59,715 --> 00:06:02,770 E para fazer isso, a gente pode usar a função nativa len, 147 00:06:02,770 --> 00:06:06,860 que recebe alguma coleção e retorna para a gente a quantidade de itens. 148 00:06:06,860 --> 00:06:08,865 Então, basta a gente informar aqui 149 00:06:08,865 --> 00:06:11,830 para ele a nossa variável notas, e pronto. 150 00:06:11,830 --> 00:06:14,660 Vou colocar aqui um return, média, 151 00:06:14,660 --> 00:06:17,810 para fazer com que a nossa função retorne o valor daquele cálculo. 152 00:06:17,810 --> 00:06:19,645 E se a gente executar o nosso programa 153 00:06:19,645 --> 00:06:22,090 de novo, hum, repara que a gente teve um erro. 154 00:06:22,090 --> 00:06:24,117 Isso aconteceu basicamente porque a gente 155 00:06:24,117 --> 00:06:26,340 mudou a implementação da nossa função, 156 00:06:26,340 --> 00:06:29,570 mas esqueceu de mudar os valores que foram informados no parâmetro. 157 00:06:29,570 --> 00:06:30,410 Dá uma olhada. 158 00:06:30,410 --> 00:06:34,510 Aqui dentro, a gente está informando mundo, aluno e aluna, que são texto. 159 00:06:34,510 --> 00:06:37,475 E agora sim, a gente está lidando com valores numéricos. 160 00:06:37,475 --> 00:06:40,090 Então, basta que a gente Edite aqui esses valores. 161 00:06:40,090 --> 00:06:42,660 Então, vamos começar com uma conta simples aqui. 162 00:06:42,660 --> 00:06:45,405 Eu vou informar a nota 5 e a nota 5. 163 00:06:45,405 --> 00:06:46,984 Eu vou limpar o terminal para que fique 164 00:06:46,984 --> 00:06:48,505 um pouco mais simples as coisas. 165 00:06:48,505 --> 00:06:52,680 E se a gente rodar novamente, novamente, o nosso aplicativo rodou, 166 00:06:52,680 --> 00:06:54,830 mas a gente não tem nada na tela. 167 00:06:54,830 --> 00:06:56,919 E isso aconteceu porque a gente executou 168 00:06:56,919 --> 00:06:58,950 a função e ela retornou o valor. 169 00:06:58,950 --> 00:07:00,940 Mas a gente não exibiu isso de lugar em algum. 170 00:07:00,940 --> 00:07:05,400 Então, eu vou basicamente envolver essa função dentro dos parênteses 171 00:07:05,400 --> 00:07:07,393 e usar a função nativa print, 172 00:07:07,393 --> 00:07:10,630 para que agora sim esse valor seja exibido. 173 00:07:10,630 --> 00:07:13,010 E se a gente roda de novo com os mesmos valores, 174 00:07:13,010 --> 00:07:15,380 agora sim, a gente tem a média 5. 175 00:07:15,380 --> 00:07:19,310 E se eu acrescentar algum valor aqui, como, por exemplo, 10, 176 00:07:19,310 --> 00:07:22,803 a gente tem como resultado a média 6. 177 00:07:22,803 --> 00:07:25,432 6, que é o resultado da somatória de 5, 5 178 00:07:25,432 --> 00:07:28,785 e 10, dividido pela quantidade total, que é 3. 179 00:07:28,785 --> 00:07:32,440 E é dessa forma que a gente consegue lidar com informações dinâmicas. 180 00:07:32,440 --> 00:07:33,670 Cuidado para não confundir. 181 00:07:33,670 --> 00:07:37,125 A gente ainda precisa especificar quais são as variáveis. 182 00:07:37,125 --> 00:07:39,382 E a gente pode usar os args em conjunto 183 00:07:39,382 --> 00:07:41,770 com outros tipos de variáveis comuns, 184 00:07:41,770 --> 00:07:43,973 desde que a gente especifique as variáveis 185 00:07:43,973 --> 00:07:46,670 comuns no começo e deixe os args para o final. 186 00:07:46,670 --> 00:07:49,520 A gente usou os args aqui para fazer o cálculo de uma média, 187 00:07:49,520 --> 00:07:52,316 que é um cenário em que realmente, talvez, a gente tenha 188 00:07:52,316 --> 00:07:55,990 uma quantidade dinâmica de itens e a gente tenha que lidar com isso. 189 00:07:55,990 --> 00:07:59,510 E é exatamente nesse tipo de cenário em que você vai querer usar os args. 190 00:07:59,510 --> 00:08:03,028 Normalmente, a gente costuma usar eles com listas, que vão vir de algum 191 00:08:03,028 --> 00:08:05,102 recurso externo, onde a gente não controla 192 00:08:05,102 --> 00:08:07,070 a quantidade de itens que vai ter, 193 00:08:07,070 --> 00:08:08,850 mas quer lidar com todos eles. 194 00:08:08,850 --> 00:08:10,600 E é dessa forma que a gente consegue 195 00:08:10,600 --> 00:08:12,504 lidar com essa lista dinâmica de itens, 196 00:08:12,504 --> 00:08:15,730 sem ter que necessariamente se preocupar com a quantidade informada.