valor - posiciones diccionario python
diccionario vacío como valor predeterminado para el argumento de palabra clave en la función python: ¿parece que el diccionario no se inicializa a{} en las llamadas subsiguientes? (1)
>>> def f(i, d=None, x=3):
... if not d:
... d={}
... d[i] = i*i
... x += i
... return x,d
...
>>> f(2)
(5, {2: 4})
>>> f(3)
(6, {3: 9})
>>>
Esta pregunta ya tiene una respuesta aquí:
Aquí hay una función. Mi intención es utilizar valores predeterminados de argumentos de palabras clave para hacer que el diccionario sea un diccionario vacío si no se proporciona.
>>> def f( i, d={}, x=3 ) :
... d[i] = i*i
... x += i
... return x, d
...
>>> f( 2 )
(5, {2: 4})
Pero cuando vuelvo a llamar f, me sale:
>>> f(3)
(6, {2: 4, 3: 9})
Parece que el argumento d de la palabra clave en la segunda llamada no apunta a un diccionario vacío, sino más bien al diccionario tal como quedó al final de la llamada anterior. El número x se restablece a tres en cada llamada.
Ahora puedo solucionar este problema, pero me gustaría que me ayudaran a comprenderlo. Creía que los argumentos de palabras clave están en el ámbito local de la función y se eliminarían una vez que la función regresara. (Disculpe y corrija mi terminología si estoy siendo impreciso).
Por lo tanto, el valor local al que apunta el nombre d debe eliminarse, y en la próxima llamada, si no proporciono el argumento de palabra clave d, entonces d debería configurarse en el default {}
. Pero como puede ver, d se está configurando en el diccionario al que apuntaba en la llamada anterior.
Que esta pasando?
¿Está el literal {}
en la línea de definición en el ámbito adjunto?
Este comportamiento se ve en 2.5, 2.6 y 3.1.