¿Qué imprime esto?
def add(item, bucket=[]):
bucket.append(item)
return bucket
add(1)
print(add(2))Opciones
- [2]
- [1, 2] (Opción correcta)
- TypeError
- [[1], [2]]
Respuesta
[1, 2]
Por qué
Python crea un valor por defecto solo UNA vez, cuando se ejecuta la línea def, no en cada llamada.
Aquí el valor por defecto es un único objeto lista. Cada llamada que no pasa bucket reutiliza esa misma lista: la primera llamada añade 1, la segunda añade 2 a la misma lista, así que imprime [1, 2].
Solución: usa None como valor por defecto y crea una lista nueva dentro de la función.
def add(item, bucket=None):
if bucket is None:
bucket = []
bucket.append(item)
return bucketRecuerda
Nunca uses [], {} o set() como argumento por defecto.