1 00:00:07,864 --> 00:00:09,364 Parâmetros ajudam a gente 2 00:00:09,364 --> 00:00:11,314 a modular o comportamento de uma função, 3 00:00:11,314 --> 00:00:13,984 e a gente já sabe como definir parâmetros simples, 4 00:00:13,984 --> 00:00:16,344 que são informados de forma posicional, 5 00:00:16,344 --> 00:00:18,434 e parâmetros de quantidade dinâmica, 6 00:00:18,434 --> 00:00:19,774 em que a gente consegue lidar com eles 7 00:00:19,774 --> 00:00:21,654 como se fosse uma coleção qualquer. 8 00:00:21,654 --> 00:00:24,534 Chegou a hora da gente ver como lidar com parâmetros 9 00:00:24,534 --> 00:00:27,054 que podem ou não virem para a nossa função. 10 00:00:27,054 --> 00:00:30,234 O que a gente vai ver agora são chamados Kwargs, 11 00:00:30,234 --> 00:00:33,394 ou Keyword Arguments, que são argumentos 12 00:00:33,394 --> 00:00:36,024 que a gente passa no formato de dicionário. 13 00:00:36,024 --> 00:00:37,084 E para que eles servem? 14 00:00:37,084 --> 00:00:39,773 Imagina que você tem que trabalhar com a função 15 00:00:39,773 --> 00:00:42,714 que você tem um valor específico que tem que ser informado. 16 00:00:42,714 --> 00:00:45,884 Nesse cenário, você informa para ele um parâmetro simples, 17 00:00:45,884 --> 00:00:48,444 que sempre vai estar lá, e que se não for informado, 18 00:00:48,444 --> 00:00:50,114 o Python dá um erro. 19 00:00:50,114 --> 00:00:53,924 Por outro lado, se você tem uma lista de quantidade dinâmica, 20 00:00:53,924 --> 00:00:57,444 a gente vai ter que usar os Args, para que a gente consiga manipular eles 21 00:00:57,444 --> 00:01:00,954 de forma dinâmica, sem se preocupar com a quantidade total. 22 00:01:00,954 --> 00:01:03,564 No entanto, a gente pode querer um parâmetro 23 00:01:03,564 --> 00:01:05,654 que vai estar ou não presente. 24 00:01:05,654 --> 00:01:08,224 Ou seja, ele é uma informação opcional. 25 00:01:08,224 --> 00:01:10,854 Se ele estiver presente, a gente faz alguma coisa com ele. 26 00:01:10,854 --> 00:01:14,164 Caso não, a gente não faz ou assume algum valor padrão. 27 00:01:14,164 --> 00:01:17,764 E para isso, a estrutura de dados mais adequada que a gente conhece 28 00:01:17,764 --> 00:01:18,714 é o dicionário, 29 00:01:18,714 --> 00:01:22,354 que é justamente o tipo entregue quando a gente usa os Kwargs. 30 00:01:22,354 --> 00:01:24,384 Então, agora, vamos lá para o código e dar uma olhada 31 00:01:24,384 --> 00:01:26,004 em como esse cara funciona. 32 00:01:26,004 --> 00:01:26,974 Aqui no VS Code, 33 00:01:26,974 --> 00:01:28,444 a gente já tem um código de exemplo, 34 00:01:28,444 --> 00:01:31,354 que é uma função simples que exibe uma mensagem olá 35 00:01:31,354 --> 00:01:32,744 e algum nome que foi entregue. 36 00:01:32,744 --> 00:01:35,484 Se a gente exibir ela aqui, executar ela, na verdade, 37 00:01:35,484 --> 00:01:36,534 com o comando do Python, 38 00:01:36,534 --> 00:01:38,754 a gente vai ver exatamente isso na tela. 39 00:01:38,754 --> 00:01:42,354 Mas, imagina que a gente queira receber aqui a informação 40 00:01:42,354 --> 00:01:44,764 de se esse aluno fez ou não um trabalho prático. 41 00:01:44,764 --> 00:01:46,994 Então, a gente precisa de uma informação 42 00:01:46,994 --> 00:01:48,844 que vai dizer para a gente, na verdade, 43 00:01:48,844 --> 00:01:51,064 a nota que ele tirou nesse trabalho prático. 44 00:01:51,064 --> 00:01:54,304 E se ele não tiver uma nota, não significa que ele tirou zero. 45 00:01:54,304 --> 00:01:55,974 Significa que ele não entregou. 46 00:01:55,974 --> 00:01:56,654 Tá bom? 47 00:01:56,654 --> 00:01:58,004 Então, vamos começar com isso. 48 00:01:58,004 --> 00:02:01,244 A gente poderia definir aqui duas variáveis. 49 00:02:01,244 --> 00:02:03,734 Uma para informar se ele fez ou não um trabalho prático. 50 00:02:03,734 --> 00:02:05,634 E, para isso, a gente usaria o tipo booleano. 51 00:02:05,634 --> 00:02:08,284 E, depois, uma outra para especificar a nota. 52 00:02:08,284 --> 00:02:10,524 Mas, como a gente consegue usar os Kwargs, 53 00:02:10,524 --> 00:02:12,244 a gente vai fazer isso de uma vez só, 54 00:02:12,244 --> 00:02:13,924 informando apenas a nota. 55 00:02:13,924 --> 00:02:14,784 Então, saca só. 56 00:02:14,784 --> 00:02:17,354 Eu vou colocar aqui a minha outra variável, 57 00:02:17,354 --> 00:02:18,724 que vai ser o meu outro parâmetro, 58 00:02:18,724 --> 00:02:24,964 que eu vou chamar de informações adicionais. 59 00:02:24,964 --> 00:02:28,754 E, nesse caso, para que o Python entenda que isso daqui é um Kwargs 60 00:02:28,754 --> 00:02:30,814 e não uma variável simples, 61 00:02:30,814 --> 00:02:33,014 eu vou ter que colocar não um, mas, dessa vez, 62 00:02:33,014 --> 00:02:35,254 dois asteriscos no começo dela. 63 00:02:35,254 --> 00:02:36,584 Então, pronto. 64 00:02:36,584 --> 00:02:38,884 A partir de agora, se eu executar a aplicação 65 00:02:38,884 --> 00:02:42,214 sem mexer na invocação ou no conteúdo daquela função, 66 00:02:42,214 --> 00:02:45,084 o Python consegue executar isso sem problema nenhum. 67 00:02:45,084 --> 00:02:47,804 Porque ele já entendeu que isso se trata de um Kwargs 68 00:02:47,804 --> 00:02:50,514 e que as informações que estão ali, elas são opcionais. 69 00:02:50,514 --> 00:02:52,704 Ou seja, eu posso informar ou não. 70 00:02:52,704 --> 00:02:55,024 Se a gente vier aqui dentro do bloco de código, 71 00:02:55,024 --> 00:02:56,794 vamos executar um print com aquele valor, 72 00:02:56,794 --> 00:02:58,434 só para a gente entender o formato que as coisas 73 00:02:58,434 --> 00:02:59,924 estão chegando aqui dentro. 74 00:02:59,924 --> 00:03:04,704 Eu vou copiar o nome da variável e, aqui, chamar a função nativa print, 75 00:03:04,704 --> 00:03:06,994 passando ela para a gente ver ali no terminal. 76 00:03:06,994 --> 00:03:08,534 Eu vou executar mais uma vez. 77 00:03:08,534 --> 00:03:11,064 E repara que a mensagem está aqui e que, aqui embaixo, 78 00:03:11,064 --> 00:03:12,974 dessa vez, eu tenho um dicionário, 79 00:03:12,974 --> 00:03:16,779 que é aquela estrutura que a gente usa baseada em chave e valor. 80 00:03:16,779 --> 00:03:19,374 Então, eu vou começar aqui, na invocação do método, 81 00:03:19,374 --> 00:03:22,354 passando valores para esse meu Kwargs. 82 00:03:22,354 --> 00:03:26,694 E, para fazer isso, eu posso passar eles no formato de chaves. 83 00:03:26,694 --> 00:03:29,520 Ou seja, eu tenho que colocar o nome e o valor que eu quero 84 00:03:29,520 --> 00:03:30,414 para aquela chave. 85 00:03:30,414 --> 00:03:35,213 No nosso caso, vai ser a nota do trabalho prático, ou seja, nota tp. 86 00:03:35,213 --> 00:03:38,314 Então, por isso, eu vou colocar aqui nota tp, 87 00:03:38,314 --> 00:03:41,014 o sinal de igual e o valor que eu quero informar. 88 00:03:41,014 --> 00:03:43,534 Que, nesse caso, vai ser, por exemplo, 10. 89 00:03:43,534 --> 00:03:46,524 Eu vou só salvar o meu programa e executar de novo 90 00:03:46,524 --> 00:03:48,464 para a gente ver o que mudou. 91 00:03:48,464 --> 00:03:50,974 Aqui, a mensagem continua a mesma coisa, só que, 92 00:03:50,974 --> 00:03:53,424 dessa vez, repara que dentro do meu dicionário, 93 00:03:53,424 --> 00:03:56,984 eu tenho a chave nota tp com valor 10. 94 00:03:56,984 --> 00:03:57,884 E, a partir daqui, 95 00:03:57,884 --> 00:03:59,974 a gente já consegue trabalhar com essa informação. 96 00:03:59,974 --> 00:04:02,204 E é exatamente isso que a gente vai fazer aqui agora. 97 00:04:02,204 --> 00:04:04,744 Eu vou abrir um espacinho entre as duas mensagens 98 00:04:04,744 --> 00:04:06,414 e uma coisa que a gente tem que lembrar 99 00:04:06,414 --> 00:04:10,254 é que os Kwargs são informações realmente opcionais. 100 00:04:10,254 --> 00:04:11,904 Então, a gente tem que lidar com o cenário 101 00:04:11,904 --> 00:04:14,154 delas estarem presentes ou não. 102 00:04:14,154 --> 00:04:17,024 E a estrutura do dicionário entrega formas 103 00:04:17,024 --> 00:04:19,484 de a gente lidar com isso sem problema algum. 104 00:04:19,484 --> 00:04:20,624 Então, eu vou, basicamente, 105 00:04:20,624 --> 00:04:23,124 antes de usar as informações daquele dicionário, 106 00:04:23,124 --> 00:04:25,384 ver se tem alguma informação dentro da chave 107 00:04:25,384 --> 00:04:26,894 que eu estou pretendendo usar. 108 00:04:26,894 --> 00:04:29,214 Então, para isso, a nossa regra vai ser a seguinte. 109 00:04:29,214 --> 00:04:30,924 Se a gente não tiver aquela chave, 110 00:04:30,924 --> 00:04:33,584 significa que o aluno não fez o trabalho prático. 111 00:04:33,584 --> 00:04:34,804 E, por isso, eu vou, basicamente, 112 00:04:34,804 --> 00:04:37,744 exibir uma mensagem falando que a gente não encontrou tp. 113 00:04:37,744 --> 00:04:38,464 Vamos lá. 114 00:04:38,464 --> 00:04:42,234 Aqui dentro, eu vou começar com uma condicional para que eu veja 115 00:04:42,234 --> 00:04:46,074 se a chave nota tp está dentro daquela minha variável. 116 00:04:46,074 --> 00:04:48,404 Então, eu vou colocar aqui entre aspas, 117 00:04:48,404 --> 00:04:53,434 "nota tp" in informacoes_adicionais. 118 00:04:53,434 --> 00:04:56,854 Ou seja, se aquela nota estiver dentro daquelas informações, 119 00:04:56,854 --> 00:04:59,214 então esse bloco de código vai ser executado. 120 00:04:59,214 --> 00:05:01,484 Mas como que eu quero exatamente o contrário, 121 00:05:01,484 --> 00:05:04,154 eu vou colocar uma negação aqui antes do in. 122 00:05:04,154 --> 00:05:05,834 Então, fica da seguinte forma. 123 00:05:05,834 --> 00:05:09,394 Se a chave nota tp não estiver dentro do dicionário 124 00:05:09,394 --> 00:05:10,894 informações adicionais, 125 00:05:10,894 --> 00:05:18,424 então eu quero exibir uma mensagem falando que o tp não foi encontrado. 126 00:05:18,424 --> 00:05:21,794 E como, a partir daqui, eu não quero executar mais nada, 127 00:05:21,794 --> 00:05:25,184 eu vou apenas escrever um return para que o Python entenda 128 00:05:25,184 --> 00:05:28,074 que eu não tenho que executar mais nada daqui para frente 129 00:05:28,074 --> 00:05:29,864 e saia dessa função. 130 00:05:29,864 --> 00:05:32,784 Vamos rodar aqui de novo o nosso terminal. 131 00:05:32,784 --> 00:05:36,024 Ou melhor, limpar o terminal e executar novamente a aplicação 132 00:05:36,024 --> 00:05:39,384 para a gente ver como que as coisas se comportam do jeito que está. 133 00:05:39,384 --> 00:05:42,684 Desse jeito aqui, a aplicação não entrou na condicional 134 00:05:42,684 --> 00:05:43,609 e seguiu adiante 135 00:05:43,609 --> 00:05:46,631 exibindo aquele nosso dicionário de informações adicionais. 136 00:05:46,631 --> 00:05:50,154 Mas se a partir de agora eu remover essa informação, 137 00:05:50,154 --> 00:05:53,034 ele entra na condicional e exibe a mensagem para a gente. 138 00:05:53,034 --> 00:05:55,454 Então eu vou voltar com ela daqui para que a gente coloque 139 00:05:55,454 --> 00:05:59,094 mais coisa aqui no fluxo do nosso programa. 140 00:05:59,094 --> 00:06:00,204 E a partir desse momento, 141 00:06:00,204 --> 00:06:01,414 a gente está trabalhando com a possibilidade 142 00:06:01,414 --> 00:06:03,813 de que a nota está sendo entregue. 143 00:06:03,813 --> 00:06:07,344 Então eu vou colocar um if para ver se essa nota é maior do que 7. 144 00:06:07,344 --> 00:06:08,804 Se for, então o aluno está aprovado. 145 00:06:08,804 --> 00:06:11,514 Se não for, então o aluno está reaprovado. 146 00:06:11,514 --> 00:06:13,775 Então eu vou começar com mais uma condicional 147 00:06:13,775 --> 00:06:16,251 e eu vou acessar o informações adicionais 148 00:06:16,251 --> 00:06:19,764 e usar o método get para pegar aquela chave. 149 00:06:19,764 --> 00:06:21,411 Qual é a chave? 150 00:06:21,411 --> 00:06:22,814 a nota tp. 151 00:06:22,814 --> 00:06:26,374 Eu copio aqui e vejo se ela é maior do que 7. 152 00:06:26,374 --> 00:06:30,104 Se ela for maior do que 7, eu vou copiar aqui essa mensagem 153 00:06:30,104 --> 00:06:37,864 e eu vou editar para que ela seja: "Parabéns, você foi aprovado no tp". 154 00:06:37,864 --> 00:06:40,874 E eu também vou definir um caso padrão, que é o Else, 155 00:06:40,874 --> 00:06:43,314 para quando essa condicional não for atendida. 156 00:06:43,314 --> 00:06:46,614 E se esse for o caso, eu vou exibir a mensagem. 157 00:06:46,614 --> 00:06:51,392 "Infelizmente, você não foi aprovado no tp". 158 00:06:51,392 --> 00:06:52,704 E pronto. 159 00:06:52,704 --> 00:06:56,124 Deixa eu só tirar essa mensagem aqui de baixo, limpar o terminal, 160 00:06:56,124 --> 00:06:58,534 e se a gente executa a nossa aplicação novamente, 161 00:06:58,534 --> 00:06:59,634 a gente tem a mensagem 162 00:06:59,634 --> 00:07:04,034 "Olá, Aluno", que a gente não mexeu, e "Parabéns, você foi aprovado no TP". 163 00:07:04,034 --> 00:07:06,124 Se a gente abaixa um pouco essa nota aqui, 164 00:07:06,124 --> 00:07:07,574 para algo próximo de 10, 165 00:07:07,574 --> 00:07:10,554 mais um pouco abaixo de 7, por exemplo, 1, 166 00:07:10,554 --> 00:07:11,744 a gente vai ter a mensagem 167 00:07:11,744 --> 00:07:14,294 "Infelizmente, você não foi aprovado no TP". 168 00:07:14,294 --> 00:07:17,734 E é dessa forma que a gente consegue preparar as nossas funções 169 00:07:17,734 --> 00:07:20,874 para que elas consigam lidar com informações opcionais, ou seja, 170 00:07:20,874 --> 00:07:23,794 que podem ou não serem formadas. 171 00:07:23,794 --> 00:07:27,074 Claro, a gente poderia também lidar com informações 172 00:07:27,074 --> 00:07:30,154 do tipo se a variável estiver com um valor vazio, 173 00:07:30,154 --> 00:07:32,214 ou se uma boleana estiver informando algo, 174 00:07:32,214 --> 00:07:35,334 então eu posso assumir que uma outra variável tem um valor. 175 00:07:35,334 --> 00:07:38,854 Mas está começando a ficar bem claro que isso ficaria muito complicado 176 00:07:38,854 --> 00:07:42,364 de dar manutenção e até mesmo de entender o que está acontecendo. 177 00:07:42,364 --> 00:07:45,684 E da mesma forma com que a gente tem diversas estruturas de dados, 178 00:07:45,684 --> 00:07:47,764 a gente também tem diversas possibilidades. 179 00:07:47,764 --> 00:07:50,714 Cada um atende um cenário e cabe a gente a decidir 180 00:07:50,714 --> 00:07:53,334 qual que é a melhor para o nosso caso de uso específico.