1 00:00:18,750 --> 00:00:20,247 Parâmetros ajudam a gente a modular o comportamento 2 00:00:20,247 --> 00:00:21,352 de uma função, e a gente já sabe como 3 00:00:21,352 --> 00:00:22,711 definir parâmetros simples, que são informados 4 00:00:22,711 --> 00:00:24,111 de forma posicional, e parâmetros de quantidade 5 00:00:24,111 --> 00:00:25,517 dinâmica, em que a gente consegue lidar com eles 6 00:00:25,517 --> 00:00:26,762 como se fosse uma coleção qualquer. Chegou 7 00:00:26,762 --> 00:00:28,088 a hora da gente ver como lidar com parâmetros 8 00:00:28,088 --> 00:00:29,380 que podem ou não virem para a nossa função. 9 00:00:29,380 --> 00:00:31,411 O que a gente vai ver agora são chamados 10 00:00:31,411 --> 00:00:33,255 QArgs, ou Keyword Arguments, que são 11 00:00:33,255 --> 00:00:35,217 argumentos que a gente passa no formato 12 00:00:35,217 --> 00:00:37,130 de dicionário. E para que eles servem? 13 00:00:41,790 --> 00:00:44,224 Imagina que você tem que trabalhar com a função que você tem 14 00:00:44,224 --> 00:00:46,710 um valor específico que tem que ser informado. Nesse cenário, 15 00:00:46,710 --> 00:00:49,050 você informa para ele um parâmetro simples, que sempre vai 16 00:00:49,050 --> 00:00:52,660 estar lá, e que se não for informado, o Python dá um erro. 17 00:00:52,660 --> 00:00:54,747 Por outro lado, se você tem uma lista de quantidade 18 00:00:54,747 --> 00:00:56,525 dinâmica, a gente vai ter que usar os args, 19 00:00:56,525 --> 00:00:58,477 para que a gente consiga manipular eles de forma 20 00:00:58,477 --> 00:01:01,060 dinâmica, sem se preocupar com a quantidade total. 21 00:01:01,060 --> 00:01:04,595 No entanto, a gente pode querer um parâmetro que vai estar 22 00:01:04,595 --> 00:01:08,410 ou não presente. Ou seja, ele é uma informação opcional. 23 00:01:08,410 --> 00:01:11,366 Se ele estiver presente, a gente faz alguma coisa com ele. 24 00:01:11,366 --> 00:01:14,545 Caso não, a gente não faz ou assume algum valor padrão. 25 00:01:14,545 --> 00:01:18,102 E para isso, a estrutura de dados mais adequada que a gente conhece 26 00:01:18,102 --> 00:01:20,168 é o dicionário, que é justamente o tipo 27 00:01:20,168 --> 00:01:22,455 entregue quando a gente usa os QArgs. 28 00:01:22,455 --> 00:01:24,194 Então, agora, vamos lá para o código e dar 29 00:01:24,194 --> 00:01:26,270 uma olhada em como esse cara funciona. 30 00:01:26,270 --> 00:01:27,780 Aqui no VS Code, a gente já tem 31 00:01:27,780 --> 00:01:29,632 um código de exemplo, que é uma função 32 00:01:29,632 --> 00:01:32,820 simples que exibe uma mensagem olá e algum nome que foi entregue. 33 00:01:32,820 --> 00:01:35,357 Se a gente exibir ela aqui, executar ela, na verdade, 34 00:01:35,357 --> 00:01:39,660 com o comando do Python, a gente vai ver exatamente isso na tela. 35 00:01:39,660 --> 00:01:42,445 Mas, imagina que a gente queira receber aqui a informação 36 00:01:42,445 --> 00:01:45,140 de se esse aluno Fez ou não um trabalho prático. 37 00:01:45,140 --> 00:01:46,980 Então, a gente precisa de uma informação 38 00:01:46,980 --> 00:01:48,248 que vai dizer para a gente, 39 00:01:48,248 --> 00:01:51,170 na verdade, a nota que ele tirou nesse trabalho prático. 40 00:01:51,170 --> 00:01:53,320 E se ele não tiver uma nota, não significa 41 00:01:53,320 --> 00:01:56,150 que ele tirou zero. Significa que ele não entregou. 42 00:01:56,150 --> 00:01:58,080 Tá bom? Então, vamos começar com isso. 43 00:01:58,080 --> 00:02:01,340 A gente poderia definir aqui duas variáveis. 44 00:02:01,340 --> 00:02:03,930 Uma para informar se ele Fez ou não um trabalho prático. 45 00:02:03,930 --> 00:02:05,755 E, para isso, a gente usaria o tipo booleano. 46 00:02:05,755 --> 00:02:08,415 E, depois, uma outra para especificar a nota. 47 00:02:08,415 --> 00:02:11,169 Mas, como a gente consegue usar os QArgs, a gente vai 48 00:02:11,169 --> 00:02:14,030 fazer isso de uma vez só, informando apenas a nota. 49 00:02:14,030 --> 00:02:15,130 Então, saca só. 50 00:02:15,130 --> 00:02:17,082 Eu vou colocar aqui a minha outra variável, 51 00:02:17,082 --> 00:02:18,840 que vai ser o meu outro parâmetro, 52 00:02:18,840 --> 00:02:25,060 que eu vou chamar de informações adicionais. 53 00:02:25,060 --> 00:02:28,055 E, nesse caso, para que o Python entenda que isso 54 00:02:28,055 --> 00:02:30,970 daqui é um QArgs e não uma variável simples, 55 00:02:30,970 --> 00:02:33,124 eu vou ter que colocar não um, mas, dessa 56 00:02:33,124 --> 00:02:35,340 vez, dois asteriscos no começo dela. 57 00:02:35,340 --> 00:02:37,446 Então, pronto. A partir de agora, se 58 00:02:37,446 --> 00:02:40,134 eu executar a aplicação sem mexer na invocação 59 00:02:40,134 --> 00:02:42,389 ou no conteúdo daquela função, o Python 60 00:02:42,389 --> 00:02:45,250 consegue executar isso sem problema nenhum. 61 00:02:45,250 --> 00:02:47,841 Porque ele já entendeu que isso se trata de um QArgs 62 00:02:47,841 --> 00:02:50,650 e que as informações que estão ali, elas são opcionais. 63 00:02:50,650 --> 00:02:52,780 Ou seja, eu posso informar ou não. 64 00:02:52,780 --> 00:02:54,382 Se a gente vier aqui dentro do bloco 65 00:02:54,382 --> 00:02:56,385 de código, vamos executar um print com aquele 66 00:02:56,385 --> 00:02:58,188 valor, só para a gente entender o formato 67 00:02:58,188 --> 00:03:00,080 que as coisas estão chegando aqui dentro. 68 00:03:00,080 --> 00:03:04,860 Eu vou copiar o nome da variável e, aqui, chamar a função nativa print, 69 00:03:04,860 --> 00:03:07,150 passando ela para a gente ver ali no terminal. 70 00:03:07,150 --> 00:03:08,640 Eu vou executar mais uma vez. 71 00:03:08,640 --> 00:03:10,785 E repara que a mensagem está aqui e que, aqui 72 00:03:10,785 --> 00:03:13,110 embaixo, dessa vez, eu tenho um dicionário, 73 00:03:13,110 --> 00:03:16,900 que é aquela estrutura que a gente usa baseada em chave e valor. 74 00:03:16,900 --> 00:03:19,328 Então, eu vou começar aqui, na invocação 75 00:03:19,328 --> 00:03:22,171 do método, passando valores para esse meu QArgs. 76 00:03:22,171 --> 00:03:26,800 E, para fazer isso, eu posso passar eles no formato de chaves. 77 00:03:26,800 --> 00:03:28,389 Ou seja, eu tenho que colocar o nome 78 00:03:28,389 --> 00:03:30,520 e o valor que eu quero para aquela chave. 79 00:03:30,520 --> 00:03:32,385 No nosso caso, vai ser a nota 80 00:03:32,385 --> 00:03:35,410 do trabalho prático, ou seja, nota tp. 81 00:03:35,410 --> 00:03:38,054 Então, por isso, eu vou colocar aqui nota tp, 82 00:03:38,054 --> 00:03:41,150 o sinal de igual e o valor que eu quero informar. 83 00:03:41,150 --> 00:03:43,690 Que, nesse caso, vai ser, por exemplo, 10. 84 00:03:43,690 --> 00:03:45,883 Eu vou só salvar o meu programa e executar 85 00:03:45,883 --> 00:03:48,580 de novo para a gente ver o que mudou. 86 00:03:48,580 --> 00:03:50,933 Aqui, a mensagem continua a mesma coisa, só que, 87 00:03:50,933 --> 00:03:53,500 dessa vez, repara que dentro do meu dicionário, 88 00:03:53,500 --> 00:03:57,080 eu tenho a chave nota tp com valor 10. 89 00:03:57,080 --> 00:03:58,618 E, a partir daqui, a gente já consegue 90 00:03:58,618 --> 00:04:00,250 trabalhar com essa informação. 91 00:04:00,250 --> 00:04:02,395 E é exatamente isso que a gente vai fazer aqui agora. 92 00:04:02,395 --> 00:04:04,101 Eu vou abrir um espacinho entre as duas 93 00:04:04,101 --> 00:04:06,520 mensagens e uma coisa que a gente tem que lembrar 94 00:04:06,520 --> 00:04:10,350 é que os QArgs são informações realmente opcionais. 95 00:04:10,350 --> 00:04:12,407 Então, a gente tem que lidar com o cenário 96 00:04:12,407 --> 00:04:14,240 delas estarem presentes ou não. 97 00:04:14,240 --> 00:04:16,561 E a estrutura do dicionário entrega formas 98 00:04:16,561 --> 00:04:19,450 de a gente lidar com isso sem problema algum. 99 00:04:19,450 --> 00:04:21,340 Então, eu vou, basicamente, antes de usar 100 00:04:21,340 --> 00:04:23,210 as informações daquele dicionário, 101 00:04:23,210 --> 00:04:24,861 ver se tem alguma informação dentro 102 00:04:24,861 --> 00:04:26,980 da chave que eu estou pretendendo usar. 103 00:04:26,980 --> 00:04:29,360 Então, para isso, a nossa regra vai ser a seguinte. 104 00:04:29,360 --> 00:04:31,498 Se a gente não tiver aquela chave, significa 105 00:04:31,498 --> 00:04:33,680 que o aluno não Fez o trabalho prático. 106 00:04:33,680 --> 00:04:35,451 E, por isso, eu vou, basicamente, exibir 107 00:04:35,451 --> 00:04:37,810 uma mensagem falando que a gente não encontrou tp. 108 00:04:37,810 --> 00:04:38,670 Vamos lá. 109 00:04:38,670 --> 00:04:42,548 Aqui dentro, eu vou começar com uma condicional para que eu veja 110 00:04:42,548 --> 00:04:46,130 se a chave nota tp está dentro daquela minha variável. 111 00:04:46,130 --> 00:04:49,914 Então, eu vou colocar aqui entre aspas, 112 00:04:49,914 --> 00:04:53,540 nota tp em informações adicionais. 113 00:04:53,540 --> 00:04:56,044 Ou seja, se aquela nota estiver dentro daquelas 114 00:04:56,044 --> 00:04:59,340 informações, então esse bloco de código vai ser executado. 115 00:04:59,340 --> 00:05:01,676 Mas como que eu quero exatamente o contrário, 116 00:05:01,676 --> 00:05:04,260 eu vou colocar uma negação aqui antes do in. 117 00:05:04,260 --> 00:05:06,000 Então, fica da seguinte forma. 118 00:05:06,000 --> 00:05:08,355 Se a chave nota tp não estiver dentro 119 00:05:08,355 --> 00:05:10,985 do dicionário informações adicionais, 120 00:05:10,985 --> 00:05:18,140 então eu quero exibir uma mensagem falando que o tp não foi encontrado. 121 00:05:18,140 --> 00:05:21,960 E como, a partir daqui, eu não quero executar mais nada, 122 00:05:21,960 --> 00:05:24,966 eu vou apenas escrever um return para que o Python entenda 123 00:05:24,966 --> 00:05:28,170 que eu não tenho que executar mais nada daqui para frente 124 00:05:28,170 --> 00:05:29,970 e saia dessa função. 125 00:05:29,970 --> 00:05:32,890 Vamos rodar aqui de novo o nosso terminal. 126 00:05:32,890 --> 00:05:36,180 Ou melhor, limpar o terminal e executar novamente a aplicação 127 00:05:36,180 --> 00:05:39,480 para a gente ver como que as coisas se comportam do jeito que está. 128 00:05:39,480 --> 00:05:42,820 Desse jeito aqui, a aplicação não entrou na condicional 129 00:05:42,820 --> 00:05:44,292 e seguiu adiante exibindo aquele 130 00:05:44,292 --> 00:05:46,660 nosso dicionário de informações adicionais. 131 00:05:46,660 --> 00:05:50,260 Mas se a partir de agora eu remover essa informação, 132 00:05:50,260 --> 00:05:53,200 ele entra na condicional e exibe a mensagem para a gente. 133 00:05:53,200 --> 00:05:55,975 Então eu vou voltar com ela daqui para que a gente 134 00:05:55,975 --> 00:05:59,190 coloque mais coisa aqui no fluxo do nosso programa. 135 00:05:59,190 --> 00:06:01,347 E a partir desse momento, a gente está trabalhando 136 00:06:01,347 --> 00:06:03,870 com a possibilidade de que a nota está sendo entregue. 137 00:06:03,870 --> 00:06:07,490 Então eu vou colocar um if para ver se essa nota é maior do que 7. 138 00:06:07,490 --> 00:06:09,183 Se for, então o aluno está aprovado. 139 00:06:09,183 --> 00:06:11,610 Se não for, então o aluno está reaprovado. 140 00:06:11,610 --> 00:06:13,894 Então eu vou começar com mais uma condicional 141 00:06:13,894 --> 00:06:16,355 e eu vou acessar o informações adicionais 142 00:06:16,355 --> 00:06:19,750 e usar o método get para pegar aquela chave. 143 00:06:19,750 --> 00:06:21,600 Qual que é a chave? 144 00:06:21,600 --> 00:06:22,950 a nota tp. 145 00:06:22,950 --> 00:06:26,430 Eu copio aqui e vejo se ela é maior do que 7. 146 00:06:26,430 --> 00:06:30,210 Se ela for maior do que 7, eu vou copiar aqui essa mensagem 147 00:06:30,210 --> 00:06:31,670 e eu vou editar para que ela seja. 148 00:06:33,740 --> 00:06:37,900 parabéns, você foi aprovado no tp. 149 00:06:37,900 --> 00:06:41,030 E eu também vou definir um caso padrão, que é o Else, 150 00:06:41,030 --> 00:06:43,435 para quando essa condicional não for atendida. 151 00:06:43,435 --> 00:06:46,190 E se esse for o caso, eu vou exibir a mensagem. 152 00:06:48,500 --> 00:06:51,430 Infelizmente, você não foi aprovado no tp. 153 00:06:51,430 --> 00:06:52,730 E pronto. 154 00:06:52,730 --> 00:06:56,240 Deixa eu só tirar essa mensagem aqui de baixo, limpar o terminal, 155 00:06:56,240 --> 00:06:58,293 e se a gente executa a nossa aplicação 156 00:06:58,293 --> 00:07:00,094 novamente, a gente tem a mensagem 157 00:07:00,094 --> 00:07:04,240 Olá aluno, que a gente não mexeu, e parabéns, você foi aprovado no tp. 158 00:07:04,240 --> 00:07:06,634 Se a gente abaixa um pouco essa nota aqui, 159 00:07:06,634 --> 00:07:09,151 para algo próximo de 10, mas um pouco abaixo 160 00:07:09,151 --> 00:07:11,856 de 7, por exemplo, 1, a gente vai ter a mensagem 161 00:07:11,856 --> 00:07:14,720 Infelizmente, você não foi aprovado no tp. 162 00:07:14,720 --> 00:07:17,715 E é dessa forma que a gente consegue preparar as nossas funções 163 00:07:17,715 --> 00:07:21,090 para que elas consigam lidar com informações opcionais, ou seja, 164 00:07:21,090 --> 00:07:24,190 que podem ou não serem formadas. 165 00:07:24,190 --> 00:07:26,957 Claro, a gente poderia também lidar com informações 166 00:07:26,957 --> 00:07:29,630 do tipo se a variável estiver com um valor vazio, 167 00:07:29,630 --> 00:07:32,218 ou se uma boleana estiver informando algo, então 168 00:07:32,218 --> 00:07:35,460 eu posso assumir que uma outra variável tem um valor. 169 00:07:35,460 --> 00:07:38,911 Mas está começando a ficar bem claro que isso ficaria muito complicado 170 00:07:38,911 --> 00:07:42,480 de dar manutenção e até mesmo de entender o que está acontecendo. 171 00:07:42,480 --> 00:07:45,850 E da mesma forma com que a gente tem diversas estruturas de dados, 172 00:07:45,850 --> 00:07:47,890 a gente também tem diversas possibilidades. 173 00:07:47,890 --> 00:07:50,727 Cada um atende um cenário e cabe a gente a decidir qual 174 00:07:50,727 --> 00:07:53,310 que é a melhor para o nosso caso de uso específico.