-
Parâmetros ajudam a gente
-
a modular o comportamento
de uma função,
-
e a gente já sabe como
definir parâmetros simples,
-
que são informados
de forma posicional,
-
e parâmetros
de quantidade dinâmica,
-
em que a gente consegue
lidar com eles
-
como se fosse uma coleção qualquer.
-
Chegou a hora da gente ver
como lidar com parâmetros
-
que podem ou não virem
para a nossa função.
-
O que a gente vai ver
agora são chamados Kwargs,
-
ou Keyword Arguments,
que são argumentos
-
que a gente passa
no formato de dicionário.
-
E para que eles servem?
-
Imagina que você tem que trabalhar
com a função
-
que você tem um valor específico
que tem que ser informado.
-
Nesse cenário, você informa para ele
um parâmetro simples,
-
que sempre vai estar lá,
e que se não for informado,
-
o Python dá um erro.
-
Por outro lado, se você tem
uma lista de quantidade dinâmica,
-
a gente vai ter que usar os Args,
para que a gente consiga manipular eles
-
de forma dinâmica, sem se preocupar
com a quantidade total.
-
No entanto, a gente pode querer
um parâmetro
-
que vai estar ou não presente.
-
Ou seja, ele é uma informação opcional.
-
Se ele estiver presente,
a gente faz alguma coisa com ele.
-
Caso não, a gente não faz
ou assume algum valor padrão.
-
E para isso, a estrutura de dados
mais adequada que a gente conhece
-
é o dicionário,
-
que é justamente o tipo entregue
quando a gente usa os Kwargs.
-
Então, agora, vamos
lá para o código e dar uma olhada
-
em como esse cara funciona.
-
Aqui no VS Code,
-
a gente já tem
um código de exemplo,
-
que é uma função simples
que exibe uma mensagem olá
-
e algum nome que foi entregue.
-
Se a gente exibir ela aqui,
executar ela, na verdade,
-
com o comando do Python,
-
a gente vai ver exatamente
isso na tela.
-
Mas, imagina que a gente queira
receber aqui a informação
-
de se esse aluno
fez ou não um trabalho prático.
-
Então, a gente precisa
de uma informação
-
que vai dizer para a gente,
na verdade,
-
a nota que ele tirou
nesse trabalho prático.
-
E se ele não tiver uma nota,
não significa que ele tirou zero.
-
Significa que ele não entregou.
-
Tá bom?
-
Então, vamos começar com isso.
-
A gente poderia definir
aqui duas variáveis.
-
Uma para informar se ele fez
ou não um trabalho prático.
-
E, para isso, a gente usaria
o tipo booleano.
-
E, depois, uma outra
para especificar a nota.
-
Mas, como a gente
consegue usar os Kwargs,
-
a gente vai fazer isso
de uma vez só,
-
informando apenas a nota.
-
Então, saca só.
-
Eu vou colocar aqui
a minha outra variável,
-
que vai ser o meu
outro parâmetro,
-
que eu vou chamar
de "informacoes_adicionais".
-
E, nesse caso, para que o Python
entenda que isso daqui é um Kwargs
-
e não uma variável simples,
-
eu vou ter que colocar
não um, mas, dessa vez,
-
dois asteriscos
no começo dela.
-
Então, pronto.
-
A partir de agora,
se eu executar a aplicação
-
sem mexer na invocação
ou no conteúdo daquela função,
-
o Python consegue executar isso
sem problema nenhum.
-
Porque ele já entendeu
que isso se trata de um Kwargs
-
e que as informações
que estão ali, elas são opcionais.
-
Ou seja, eu posso informar ou não.
-
Se a gente vier aqui
dentro do bloco de código,
-
vamos executar um print
com aquele valor,
-
só para a gente entender
o formato que as coisas
-
estão chegando aqui dentro.
-
Eu vou copiar o nome da variável
e, aqui, chamar a função nativa print,
-
passando ela para a gente
ver ali no terminal.
-
Eu vou executar mais uma vez.
-
E repara que a mensagem
está aqui e que, aqui embaixo,
-
dessa vez, eu tenho um dicionário,
-
que é aquela estrutura que a gente
usa baseada em chave e valor.
-
Então, eu vou começar aqui,
na invocação do método,
-
passando valores
para esse meu Kwargs.
-
E, para fazer isso, eu posso
passar eles no formato de chaves.
-
Ou seja, eu tenho que colocar
o nome e o valor que eu quero
-
para aquela chave.
-
No nosso caso, vai ser a nota
do trabalho prático, ou seja, nota tp.
-
Então, por isso, eu vou
colocar aqui nota tp,
-
o sinal de igual e o valor
que eu quero informar.
-
Que, nesse caso,
vai ser, por exemplo, 10.
-
Eu vou só salvar o meu programa
e executar de novo
-
para a gente ver o que mudou.
-
Aqui, a mensagem continua
a mesma coisa, só que,
-
dessa vez, repara que dentro
do meu dicionário,
-
eu tenho a chave
nota tp com valor 10.
-
E, a partir daqui,
-
a gente já consegue trabalhar
com essa informação.
-
E é exatamente isso que a gente
vai fazer aqui agora.
-
Eu vou abrir um espacinho
entre as duas mensagens
-
e uma coisa que a gente
tem que lembrar
-
é que os Kwargs são informações
realmente opcionais.
-
Então, a gente tem que lidar
com o cenário
-
delas estarem presentes ou não.
-
E a estrutura do dicionário
entrega formas
-
de a gente lidar com isso
sem problema algum.
-
Então, eu vou, basicamente,
-
antes de usar as informações
daquele dicionário,
-
ver se tem alguma informação
dentro da chave
-
que eu estou pretendendo usar.
-
Então, para isso, a nossa regra
vai ser a seguinte.
-
Se a gente não tiver
aquela chave,
-
significa que o aluno
não fez o trabalho prático.
-
E, por isso, eu vou,
basicamente,
-
exibir uma mensagem falando
que a gente não encontrou tp.
-
Vamos lá.
-
Aqui dentro, eu vou começar
com uma condicional para que eu veja
-
se a chave nota tp está
dentro daquela minha variável.
-
Então, eu vou colocar
aqui entre aspas,
-
"nota tp" in informacoes_adicionais.
-
Ou seja, se aquela nota estiver
dentro daquelas informações,
-
então esse bloco de código
vai ser executado.
-
Mas como que eu quero
exatamente o contrário,
-
eu vou colocar uma negação
aqui antes do in.
-
Então, fica da seguinte forma.
-
Se a chave nota tp
não estiver dentro do dicionário
-
informações adicionais,
-
então eu quero exibir uma mensagem
falando que o tp não foi encontrado.
-
E como, a partir daqui,
eu não quero executar mais nada,
-
eu vou apenas escrever um return
para que o Python entenda
-
que eu não tenho que executar
mais nada daqui para frente
-
e saia dessa função.
-
Vamos rodar aqui de novo
o nosso terminal.
-
Ou melhor, limpar o terminal
e executar novamente a aplicação
-
para a gente ver como que as coisas
se comportam do jeito que está.
-
Desse jeito aqui, a aplicação
não entrou na condicional
-
e seguiu adiante
-
exibindo aquele nosso dicionário
de informações adicionais.
-
Mas se a partir de agora
eu remover essa informação,
-
ele entra na condicional
e exibe a mensagem para a gente.
-
Então eu vou voltar com ela daqui
para que a gente coloque
-
mais coisa aqui no fluxo
do nosso programa.
-
E a partir desse momento,
-
a gente está trabalhando
com a possibilidade
-
de que a nota está sendo entregue.
-
Então eu vou colocar um if para ver
se essa nota é maior do que 7.
-
Se for, então o aluno
está aprovado.
-
Se não for, então o aluno
está reaprovado.
-
Então eu vou começar
com mais uma condicional
-
e eu vou acessar
o informações adicionais
-
e usar o método get
para pegar aquela chave.
-
Qual é a chave?
-
A nota tp.
-
Eu copio aqui e vejo se ela
é maior do que 7.
-
Se ela for maior do que 7,
eu vou copiar aqui essa mensagem
-
e eu vou editar para que ela seja:
"Parabéns, você foi aprovado no TP.
-
E eu também vou definir
um caso padrão, que é o Else,
-
para quando essa condicional
não for atendida.
-
E se esse for o caso,
eu vou exibir a mensagem.
-
"Infelizmente, você não
foi aprovado no TP".
-
E pronto.
-
Deixa eu só tirar essa mensagem
aqui de baixo, limpar o terminal,
-
e se a gente executa
a nossa aplicação novamente,
-
a gente tem a mensagem
-
"Olá, Aluno", que a gente não mexeu,
e "Parabéns, você foi aprovado no TP".
-
Se a gente abaixa
um pouco essa nota aqui,
-
para algo próximo de 10,
-
mais um pouco abaixo de 7,
por exemplo, 1,
-
a gente vai ter a mensagem:
-
"Infelizmente, você não
foi aprovado no TP".
-
E é dessa forma que a gente
consegue preparar as nossas funções
-
para que elas consigam lidar
com informações opcionais, ou seja,
-
que podem ou não serem informadas.
-
Claro, a gente poderia
também lidar com informações
-
do tipo se a variável
estiver com um valor vazio,
-
ou se uma boleana estiver
informando algo,
-
então eu posso assumir
que uma outra variável tem um valor.
-
Mas está começando a ficar bem claro
que isso ficaria muito complicado
-
de dar manutenção e até mesmo
de entender o que está acontecendo.
-
E da mesma forma com que a gente
tem diversas estruturas de dados,
-
a gente também tem
diversas possibilidades.
-
Cada um atende um cenário
e cabe a gente a decidir
-
qual que é a melhor para o nosso
caso de uso específico.