dicionário vazio como valor padrão para o argumento de palavra-chave na função python: o dicionário parece não ter sido inicializado para {} nas chamadas subseqüentes? [duplicado
Esta pergunta já tem uma resposta aqui:
subclasse de matriz irregular compartilha inexplicavelmente atributos entre instâncias 1 respostaAqui está uma função. Minha intenção é usar os padrões de argumento de palavra-chave para tornar o dicionário um dicionário vazio, se não for fornecid
>>> def f( i, d={}, x=3 ) :
... d[i] = i*i
... x += i
... return x, d
...
>>> f( 2 )
(5, {2: 4})
Mas quando chamo f, recebo:
>>> f(3)
(6, {2: 4, 3: 9})
Parece que o argumento da palavra-chave d na segunda chamada não aponta para um dicionário vazio, mas para o dicionário que foi deixado no final da chamada anterior. O número x é redefinido para três em cada chamad
Agora posso resolver isso, mas gostaria da sua ajuda para entender isso. Eu acreditava que os argumentos das palavras-chave estão no escopo local da função e seriam excluídos assim que a função retornasse. (Desculpe e corrija minha terminologia se estiver sendo impreciso.)
Portanto, o valor local apontado pelo nome d deve ser excluído e, na próxima chamada, se eu não fornecer o argumento da palavra-chave d, d deve ser definido comodefault {}
. Mas como você pode ver, d está sendo definido como o dicionário apontado na chamada anterior.
O que está acontecendo
É oliteral {}
na linha de definição no escopo anexo?
Este comportamento é visto em 2.5, 2.6 e 3.