valores valor sumar posiciones llenar listas for ejercicios diccionarios diccionario con como clave actualizar acceder python dictionary scope keyword-argument

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}) >>>

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.