1
resposta

Dúvida na lógica da função >>>def visualizar_lista(lista = None):

Bom dia,

Assistindo a primeira aula do curso, no terceiro vídeo, o professor Guilherme descreveu a função abaixo como a solução para que a lista sempre retorne vazia ao ser chamada, não importa o número de vezes que isso ocorra. No entanto, não entendi o funcionamento da solução.

Na minha lógica, a primeira vez que essa função for ser executada, a lista irá receber valor nenhum (None) e, por ser None, entrará dentro do if e executará o restante do código.

No entanto, executar o código envolve adicionar o valor 13 à lista, fazendo com que ela deixe de ser vazia. Não entendo o porque de, na segunda vez que ela é executada, ainda entra dentro do if, uma vez que ela acabou de receber um valor e, como o próprio professor explicou, a linha >>>def visualizar_lista(lista = None):<<< só é lida na primeira vez.

def visualizar_lista(lista = None):#lembrando: essa linha é lida apenas na primeira vez
        if(lista == None):
            lista = list()
        print(len(lista))
        print(lista)
        lista.append(13)
visualizar_lista()
1 resposta

Olá Marcelo.

O que acontece é que quando rodamos a linha que cria função:

def visualizar_lista(lista = None):#lembrando: essa linha é lida apenas na primeira vez
        if(lista == None):
            lista = list()
        print(len(lista))
        print(lista)
        lista.append(13)

Ela é rodada uma vez, e essa vez é quando você cria a função. Nesse momento o Python cria o objeto None e ele vai ser usada sempre que a função for chamada sem receber o parâmetro lista.

obs: Nesse ponto vale lembrar que a versão anterior dessa função def visualizar_lista(lista = []): esse era o momento que era criado um objeto na memoria que era uma lista e que seria usada sempre que o parâmetro lista não fosse passado.

Agora vamos analisar a primeira vez que chamarmos essa função sem mandar parâmetros:

visualizar_lista()

Nesse momento, já que não passamos o parâmetro o Python vai utilizar o objeto criado quando a função foi criado, o objeto None e ele vai ser usado na variável lista.

    if(lista == None):

E já que lista recebeu o objeto None vamos entrar no if.

    if(lista == None):
        lista = list()

Dentro desse if o Python vai criar um objeto na memoria e ele será to tipo List e será salvo na variável lista.

    if(lista == None):
        lista = list()
        print(len(lista))
        print(lista)
        lista.append(13)

Nas linhas seguintes, vamos imprimir o tamanho da lista, o conteúdo da lista e por ultimo vamos adicionar o numero 13 nessa lista.

Agora vamos analisar a segunda vez que chamarmos essa função sem mandar parâmetros:

visualizar_lista()

Nesse momento, já que não passamos o parâmetro o Python vai utilizar o objeto criado quando a função foi criado, o objeto None e ele vai ser usado na variável lista.

A partir desse ponto tudo vai se repetir como na primeira vez.

Acho que vale ressaltar que quando o parâmetro default da função era a criação da lista (def visualizar_lista(lista = []):), esse objeto List assim como o objeto None vai ser criado no momento que criamos a função e será usado na variável lista sempre que não mandarmos um parâmetro. Esse ponto é o mais importante para diferenciar os dois comportamentos dessas funções.

Espero ter ajudado a esclarecer, mas qualquer duvida não hesite em perguntar.

Bons Estudos