< Return to Video

vimeo.com/.../1064653433

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

Portuguese subtitles

Revisions Compare revisions