Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida

Poderia me explicar melhor porque é necessário por na função o lista = None ? Obrigada desde já.

2 respostas
solução!

No exemplo da aula ele mostra as consequências de colocar um "valor padrão" no parâmetro de uma função, mais especificamente com listas.

Qual é a consequência? Se você definir no parâmetro "lista" que seu valor padrão é uma lista em branco lista = [], a primeira vez que a função faz_processamento_de_visualizacao() for chamada sem nenhum valor especificado entre os parênteses, como por exemplo:

#chamando a função colocando minha_lista no parâmetro
minha_lista = [1, 2, 3]
faz_processamento_de_visualizacao(minha_lista)

#chamando a função sem colocar nenhuma lista no parâmetro
faz_processamento_de_visualizacao()

A função faz_processamento_de_visualizacao() na primeira que vez que for chamada dessa forma, irá criar uma lista em branco para você. Da segunda vez em diante, todas as vezes que você chamar essa função sem espeficificar uma lista no parâmetro como eu fiz acima no exemplo, ele vai usar a lista que ele criou na primeira chamada... Exemplifico no código abaixo:

faz_processamento_de_visualizacao(lista = []):
    #if lista == algo?
            #se é então use esse algo
    #senão:
            #crie uma nova lista com o nome "lista"


faz_processamento_de_visualizacao() 
#chamamos pela primeira vez, não colocamos uma lista no parâmetro, então ele cria a "lista"

faz_processamento_de_visualizacao() 
#chamamos de novo, não colocamos uma lista no parâmetro de novo, mas AGORA 
#"lista" pra ele é "algo", pois ele criou anteriormente uma lista com esse nome
#AGORA toda vez que chamarmos faz_processamento_de_visualizacao() dessa forma
#será a mesma coisa de fazer isso: 
#faz_processamento_de_visualizacao(lista)
#faz_processamento_de_visualizacao(lista)
#faz_processamento_de_visualizacao(lista)

E tudo o que fizermos dentro da função faz_processamento_de_visualizacao(), ele vai fazer utilizando o objeto "lista" que foi criado na primeira chamada.

Mas e se não quisermos isso? E se o objetivo do nosso código é fazer ele sempre criar uma NOVA LISTA quando for chamado sem colocar uma lista no parâmetro como eu fiz no primeiro exemplo?

Aí colocamos o valor None no parâmetro, para que dentro da função, nós tenhamos condições de verificar se existe uma lista no parâmetro:

faz_processamento_de_visualizacao(lista='None'):
        if lista == None: #Não foi colocado uma lista no parâmetro?
                lista = [] #então cria uma lista nova

E a próxima vez que ela for chamada, vai ser lida da mesma forma:

faz_processamento_de_visualizacao(lista='None'):
        if lista == None: #Não foi colocado uma lista no parâmetro?
                lista = [] #então cria uma lista nova

Porque agora, quando você não colocar uma lista no parâmetro, seu valor padrão não será um objeto ou uma lista, seu valor padrão será None, e dentro da função nós definimos o que deve ser feito caso None seja o valor de lista.

Anteriormente o valor padrão era uma lista em branco, depois de criada pela primeira vez, o valor padrão passou a ser essa lista em branco sempre.

Entendi, obrigada!