0:00:18.750,0:00:19.498 Parâmetros ajudam a gente 0:00:19.498,0:00:20.425 a modular o comportamento[br]de uma função, 0:00:20.425,0:00:21.568 e a gente já sabe como[br]definir parâmetros simples, 0:00:21.568,0:00:22.839 que são informados[br]de forma posicional, 0:00:22.839,0:00:24.178 e parâmetros [br]de quantidade dinâmica, 0:00:24.178,0:00:25.517 em que a gente consegue [br]lidar com eles 0:00:25.517,0:00:26.139 como se fosse uma coleção qualquer. 0:00:26.139,0:00:28.088 Chegou a hora da gente ver [br]como lidar com parâmetros 0:00:28.088,0:00:29.380 que podem ou não virem[br]para a nossa função. 0:00:29.380,0:00:31.317 O que a gente vai ver[br]agora são chamados KWARGs, 0:00:31.317,0:00:33.267 ou Keyword Arguments, [br]que são argumentos 0:00:33.267,0:00:35.198 que a gente passa [br]no formato de dicionário. 0:00:35.198,0:00:37.130 E para que eles servem? 0:00:41.790,0:00:44.250 Imagina que você tem que trabalhar[br]com a função que você tem 0:00:44.250,0:00:45.480 um valor específico que tem[br]que ser informado. 0:00:45.480,0:00:47.265 Nesse cenário, você informa para ele [br]um parâmetro simples, 0:00:47.265,0:00:49.962 que sempre vai estar lá, [br]e que se não for informado, 0:00:49.962,0:00:52.660 o Python dá um erro. 0:00:52.660,0:00:54.592 Por outro lado, se você tem [br]uma lista de quantidade dinâmica, 0:00:54.592,0:00:56.534 a gente vai ter que usar os args,[br]para que a gente consiga manipular eles 0:00:56.534,0:01:01.060 de forma dinâmica, sem se preocupar[br]com a quantidade total. 0:01:01.060,0:01:04.735 No entanto, a gente pode querer[br]um parâmetro 0:01:04.735,0:01:06.572 que vai estar ou não presente. 0:01:06.572,0:01:08.410 Ou seja, ele é uma informação opcional. 0:01:08.410,0:01:11.366 Se ele estiver presente, [br]a gente faz alguma coisa com ele. 0:01:11.366,0:01:14.545 Caso não, a gente não faz[br]ou assume algum valor padrão. 0:01:14.545,0:01:18.102 E para isso, a estrutura de dados[br]mais adequada que a gente conhece 0:01:18.102,0:01:19.135 é o dicionário, 0:01:19.135,0:01:22.455 que é justamente o tipo entregue [br]quando a gente usa os KWARGs. 0:01:22.455,0:01:24.362 Então, agora, vamos[br]lá para o código e dar uma olhada 0:01:24.362,0:01:26.270 em como esse cara funciona. 0:01:26.270,0:01:27.951 Aqui no VS Code, 0:01:27.951,0:01:28.791 a gente já tem [br]um código de exemplo, 0:01:28.791,0:01:30.805 que é uma função simples [br]que exibe uma mensagem olá 0:01:30.805,0:01:32.820 e algum nome que foi entregue. 0:01:32.820,0:01:35.357 Se a gente exibir ela aqui,[br]executar ela, na verdade, 0:01:35.357,0:01:37.508 com o comando do Python, 0:01:37.508,0:01:39.660 a gente vai ver exatamente [br]isso na tela. 0:01:39.660,0:01:42.445 Mas, imagina que a gente queira[br]receber aqui a informação 0:01:42.445,0:01:45.140 de se esse aluno [br]fez ou não um trabalho prático. 0:01:45.140,0:01:46.980 Então, a gente precisa[br]de uma informação 0:01:46.980,0:01:49.075 que vai dizer para a gente,[br]na verdade, 0:01:49.075,0:01:51.170 a nota que ele tirou[br]nesse trabalho prático. 0:01:51.170,0:01:53.660 E se ele não tiver uma nota, [br]não significa que ele tirou zero. 0:01:53.660,0:01:56.150 Significa que ele não entregou. 0:01:56.150,0:01:57.115 Tá bom? 0:01:57.115,0:01:58.080 Então, vamos começar com isso. 0:01:58.080,0:02:01.340 A gente poderia definir[br]aqui duas variáveis. 0:02:01.340,0:02:03.930 Uma para informar se ele fez[br]ou não um trabalho prático. 0:02:03.930,0:02:05.755 E, para isso, a gente usaria [br]o tipo booleano. 0:02:05.755,0:02:08.415 E, depois, uma outra[br]para especificar a nota. 0:02:08.415,0:02:09.792 Mas, como a gente [br]consegue usar os KWARGs, 0:02:09.792,0:02:11.911 a gente vai fazer isso [br]de uma vez só, 0:02:11.911,0:02:13.520 informando apenas a nota. 0:02:13.520,0:02:15.130 Então, saca só. 0:02:15.130,0:02:17.082 Eu vou colocar aqui[br]a minha outra variável, 0:02:17.082,0:02:18.840 que vai ser o meu[br]outro parâmetro, 0:02:18.840,0:02:25.060 que eu vou chamar[br]de informações adicionais. 0:02:25.060,0:02:28.015 E, nesse caso, para que o Python[br]entenda que isso daqui é um KWARGs 0:02:28.015,0:02:30.970 e não uma variável simples, 0:02:30.970,0:02:33.155 eu vou ter que colocar[br]não um, mas, dessa vez, 0:02:33.155,0:02:35.340 dois asteriscos[br]no começo dela. 0:02:35.340,0:02:36.393 Então, pronto. 0:02:36.393,0:02:38.263 A partir de agora, [br]se eu executar a aplicação 0:02:38.263,0:02:40.326 sem mexer na invocação[br]ou no conteúdo daquela função, 0:02:40.326,0:02:45.250 o Python consegue executar isso[br]sem problema nenhum. 0:02:45.250,0:02:47.841 Porque ele já entendeu[br]que isso se trata de um KWARGs 0:02:47.841,0:02:50.650 e que as informações [br]que estão ali, elas são opcionais. 0:02:50.650,0:02:52.780 Ou seja, eu posso informar ou não. 0:02:52.780,0:02:54.582 Se a gente vier aqui [br]dentro do bloco de código, 0:02:54.582,0:02:56.385 vamos executar um print [br]com aquele valor, 0:02:56.385,0:02:58.232 só para a gente entender [br]o formato que as coisas 0:02:58.232,0:03:00.080 estão chegando aqui dentro. 0:03:00.080,0:03:04.860 Eu vou copiar o nome da variável e,[br]aqui, chamar a função nativa print, 0:03:04.860,0:03:07.150 passando ela para a gente[br]ver ali no terminal. 0:03:07.150,0:03:08.640 Eu vou executar mais uma vez. 0:03:08.640,0:03:10.875 E repara que a mensagem[br]está aqui e que, aqui embaixo, 0:03:10.875,0:03:13.110 dessa vez, eu tenho um dicionário, 0:03:13.110,0:03:16.900 que é aquela estrutura que a gente[br]usa baseada em chave e valor. 0:03:16.900,0:03:19.535 Então, eu vou começar aqui, [br]na invocação do método, 0:03:19.535,0:03:22.171 passando valores[br]para esse meu KWARGs. 0:03:22.171,0:03:26.800 E, para fazer isso, eu posso[br]passar eles no formato de chaves. 0:03:26.800,0:03:28.660 Ou seja, eu tenho que colocar [br]o nome e o valor que eu quero 0:03:28.660,0:03:30.520 para aquela chave. 0:03:30.520,0:03:35.410 No nosso caso, vai ser a nota[br]do trabalho prático, ou seja, nota tp. 0:03:35.410,0:03:38.054 Então, por isso, eu vou[br]colocar aqui nota tp, 0:03:38.054,0:03:41.150 o sinal de igual e o valor[br]que eu quero informar. 0:03:41.150,0:03:43.690 Que, nesse caso, vai[br]ser, por exemplo, 10. 0:03:43.690,0:03:46.135 Eu vou só salvar o meu programa [br]e executar de novo 0:03:46.135,0:03:48.580 para a gente ver o que mudou. 0:03:48.580,0:03:50.933 Aqui, a mensagem continua[br]a mesma coisa, só que, 0:03:50.933,0:03:53.500 dessa vez, repara que dentro[br]do meu dicionário, 0:03:53.500,0:03:57.080 eu tenho a chave[br]nota tp com valor 10. 0:03:57.080,0:03:57.849 E, a partir daqui, 0:03:57.849,0:04:00.250 a gente já consegue trabalhar[br]com essa informação. 0:04:00.250,0:04:02.395 E é exatamente isso que a gente[br]vai fazer aqui agora. 0:04:02.395,0:04:04.457 Eu vou abrir um espacinho[br]entre as duas mensagens 0:04:04.457,0:04:06.520 e uma coisa que a gente [br]tem que lembrar 0:04:06.520,0:04:10.350 é que os KWARGs são informações[br]realmente opcionais. 0:04:10.350,0:04:11.322 Então, a gente tem que lidar [br]com o cenário 0:04:11.322,0:04:14.240 delas estarem presentes ou não. 0:04:14.240,0:04:16.845 E a estrutura do dicionário[br]entrega formas 0:04:16.845,0:04:19.450 de a gente lidar com isso[br]sem problema algum. 0:04:19.450,0:04:21.330 Então, eu vou, basicamente, 0:04:21.330,0:04:23.210 antes de usar as informações[br]daquele dicionário, 0:04:23.210,0:04:25.095 ver se tem alguma informação [br]dentro da chave 0:04:25.095,0:04:26.980 que eu estou pretendendo usar. 0:04:26.980,0:04:29.360 Então, para isso, a nossa regra[br]vai ser a seguinte. 0:04:29.360,0:04:30.429 Se a gente não tiver[br]aquela chave, 0:04:30.429,0:04:33.680 significa que o aluno [br]não fez o trabalho prático. 0:04:33.680,0:04:34.565 E, por isso, eu vou,[br]basicamente, 0:04:34.565,0:04:37.810 exibir uma mensagem falando[br]que a gente não encontrou tp. 0:04:37.810,0:04:38.670 Vamos lá. 0:04:38.670,0:04:42.548 Aqui dentro, eu vou começar[br]com uma condicional para que eu veja 0:04:42.548,0:04:46.130 se a chave nota tp está[br]dentro daquela minha variável. 0:04:46.130,0:04:49.914 Então, eu vou colocar[br]aqui entre aspas, 0:04:49.914,0:04:53.540 nota tp em informações[br]adicionais. 0:04:53.540,0:04:56.440 Ou seja, se aquela nota estiver [br]dentro daquelas informações, 0:04:56.440,0:04:59.340 então esse bloco de código[br]vai ser executado. 0:04:59.340,0:05:01.676 Mas como que eu quero[br]exatamente o contrário, 0:05:01.676,0:05:04.260 eu vou colocar uma negação[br]aqui antes do in. 0:05:04.260,0:05:06.000 Então, fica da seguinte forma. 0:05:06.000,0:05:08.492 Se a chave nota tp[br]não estiver dentro do dicionário 0:05:08.492,0:05:10.985 informações adicionais, 0:05:10.985,0:05:18.140 então eu quero exibir uma mensagem[br]falando que o tp não foi encontrado. 0:05:18.140,0:05:21.960 E como, a partir daqui, [br]eu não quero executar mais nada, 0:05:21.960,0:05:24.966 eu vou apenas escrever um return[br]para que o Python entenda 0:05:24.966,0:05:28.170 que eu não tenho que executar[br]mais nada daqui para frente 0:05:28.170,0:05:29.970 e saia dessa função. 0:05:29.970,0:05:33.075 Vamos rodar aqui de novo[br]o nosso terminal. 0:05:33.075,0:05:36.180 Ou melhor, limpar o terminal[br]e executar novamente a aplicação 0:05:36.180,0:05:39.480 para a gente ver como que as coisas[br]se comportam do jeito que está. 0:05:39.480,0:05:42.820 Desse jeito aqui, a aplicação[br]não entrou na condicional 0:05:42.820,0:05:46.660 e seguiu adiante exibindo aquele [br]nosso dicionário de informações adicionais. 0:05:46.660,0:05:50.260 Mas se a partir de agora[br]eu remover essa informação, 0:05:50.260,0:05:53.200 ele entra na condicional[br]e exibe a mensagem para a gente. 0:05:53.200,0:05:56.195 Então eu vou voltar com ela daqui [br]para que a gente coloque 0:05:56.195,0:05:59.190 mais coisa aqui no fluxo [br]do nosso programa. 0:05:59.190,0:06:00.268 E a partir desse momento, 0:06:00.268,0:06:02.069 a gente está trabalhando[br]com a possibilidade 0:06:02.069,0:06:03.870 de que a nota está sendo entregue. 0:06:03.870,0:06:07.490 Então eu vou colocar um if para ver[br]se essa nota é maior do que 7. 0:06:07.490,0:06:09.183 Se for, então o aluno[br]está aprovado. 0:06:09.183,0:06:11.610 Se não for, então o aluno [br]está reaprovado. 0:06:11.610,0:06:13.894 Então eu vou começar[br]com mais uma condicional 0:06:13.894,0:06:16.355 e eu vou acessar[br]o informações adicionais 0:06:16.355,0:06:19.750 e usar o método get[br]para pegar aquela chave. 0:06:19.750,0:06:21.600 Qual é a chave? 0:06:21.600,0:06:22.950 a nota tp. 0:06:22.950,0:06:26.430 Eu copio aqui e vejo se[br]ela é maior do que 7. 0:06:26.430,0:06:30.210 Se ela for maior do que 7,[br]eu vou copiar aqui essa mensagem 0:06:30.210,0:06:31.670 e eu vou editar para que ela seja. 0:06:33.740,0:06:37.900 "Parabéns, você foi aprovado no tp". 0:06:37.900,0:06:41.030 E eu também vou definir[br]um caso padrão, que é o Else, 0:06:41.030,0:06:43.435 para quando essa condicional[br]não for atendida. 0:06:43.435,0:06:46.190 E se esse for o caso,[br]eu vou exibir a mensagem. 0:06:48.500,0:06:51.430 "Infelizmente, você não[br]foi aprovado no tp". 0:06:51.430,0:06:52.730 E pronto. 0:06:52.730,0:06:56.240 Deixa eu só tirar essa mensagem[br]aqui de baixo, limpar o terminal, 0:06:56.240,0:06:58.167 e se a gente executa[br]a nossa aplicação novamente, 0:06:58.167,0:07:00.094 a gente tem a mensagem 0:07:00.094,0:07:04.240 "Olá aluno, que a gente não mexeu,[br]e parabéns, você foi aprovado no tp". 0:07:04.240,0:07:06.634 Se a gente abaixa[br]um pouco essa nota aqui, 0:07:06.634,0:07:07.892 para algo próximo de 10, 0:07:07.892,0:07:09.874 mas um pouco abaixo de 7, [br]por exemplo, 1, 0:07:09.874,0:07:12.297 a gente vai ter a mensagem 0:07:12.297,0:07:14.720 "Infelizmente, você não[br]foi aprovado no tp". 0:07:14.720,0:07:17.715 E é dessa forma que a gente[br]consegue preparar as nossas funções 0:07:17.715,0:07:21.090 para que elas consigam lidar[br]com informações opcionais, ou seja, 0:07:21.090,0:07:24.190 que podem ou não serem formadas. 0:07:24.190,0:07:26.957 Claro, a gente poderia[br]também lidar com informações 0:07:26.957,0:07:29.630 do tipo se a variável[br]estiver com um valor vazio, 0:07:29.630,0:07:30.924 ou se uma boleana estiver[br]informando algo, 0:07:30.924,0:07:35.460 então eu posso assumir [br]que uma outra variável tem um valor. 0:07:35.460,0:07:38.911 Mas está começando a ficar bem claro[br]que isso ficaria muito complicado 0:07:38.911,0:07:42.480 de dar manutenção e até mesmo[br]de entender o que está acontecendo. 0:07:42.480,0:07:45.850 E da mesma forma com que a gente[br]tem diversas estruturas de dados, 0:07:45.850,0:07:47.890 a gente também tem[br]diversas possibilidades. 0:07:47.890,0:07:49.308 Cada um atende um cenário[br]e cabe a gente a decidir 0:07:49.308,0:07:53.310 qual que é a melhor para o nosso [br]caso de uso específico.