No entiendo el siguiente ejemplo, digamos que tengo estas funciones:
# python likes
def save(filename, data, **kwargs):
fo = openX(filename, "w", **kwargs) # <- #1
fo.write(data)
fo.close()
# python doesnt like
def save2(filename, data, **kwargs):
fo = openX(filename, "w", kwargs) # <- #2
fo.write(data)
fo.close()
def openX(filename, mode, **kwargs):
#doing something fancy and returning a file object
¿Por qué es # 1 la solución correcta y # 2 la incorrecta? **kwargses básicamente un dict, así que si quiero pasar el argumento a openX creo que la forma correcta sería sin **y solo dict el dict. Pero a python obviamente no le gusta el segundo y me dice que di 3 argumentos en lugar de 2. Entonces, ¿cuál es la razón detrás de esto?
**argsen el código. Esto es posiblemente el peor nombre posible, ya que la gente se confunda con*args