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

Não entendi porque a função recebe argumento

Boa tarde pessoal. Na vídeo aula foi usado o seguinte código

 def cadastrar(nomes):
...     print 'Digite seu nome'
...     nome = raw_input()
...     nomes.append(nome)

mas eu não entendi o porque do nomes em cadastrar( nomes) testei o mesmo código no terminal só que sem o argumento (nomes) e funcionou perfeitamente. Alguém poderia me dizer porque foi utilizado o argumento?

4 respostas
solução!

Eu fiz o mesmo teste aqui e não funcionou.

TypeError: cadastrar() takes exactly 1 argument (0 given)

Você fez exatamente assim? Digitou linha a linha no seu console?

O que esse código faz é declarar uma função. Você precisa chamá-la logo em seguida.

Se chamar

cadastrar()

Vai receber um erro, porque não passou o a lista de nomes.

Se fizer assim:

def cadastrar():
    print 'Digite seu nome'
    nome = raw_input()
    nomes.append(nome)

Terá outro erro, porque a chamada de cadastrar() vai funcionar, mas depois de você ler o nome, o Python tentará adicionar o nome em uma lista que não existe resultado no erro:

NameError: global name 'nomes' is not defined

No entanto, se você declarar a variável nomes antes de chamar a função, ela estará no escopo global e vai funcionar. Mas é uma boa prática passar os dados de que a função precisa ao invés de pegá-las no escopo global.

Olá Gustavo,

a função recebe uma lista como argumento (nomes). O que a função faz é ler um nome da entrada padrão e inserir o mesmo na lista recebida.

Agora suponha que você definiu a função sem parâmetro algum. O comando nomes.append(nome) funciona por que há uma variável nomes definida globalmente (no caso, no shell e fora de qualquer escopo).

Olhe o que o parâmetro nos permite fazer:

nomes = []

def cadastrar(lista_de_nomes):
    nome = raw_input()
    lista_de_nomes.append(nome)

cadastrar(nomes)

Ou seja, você teve "sorte" de que o nome da lista definida globalmente tem o mesmo nome que o parâmetro, e portanto a ausência do último não causa erros. Cuidado!

Abraços, Victor.

Entendi perfeitamente pessoal! Obrigado pela resposta bem explicada.

então o argumento seria pra indicar a lista no qual o cadastrar vai capturar certo?

Isso, a lista na qual o valor que você digitar será adicionado.

Sucesso e bom estudo meu aluno!