que no entiendo el siguiente ejemplo, digamos que tengo estas funciones:pase ** kwargs argumento a otra función con kwargs **
# 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é el # 1 la solución adecuada y # 2 el incorrecto ? **kwargs
es básicamente un dict, así que si quiero pasar el argumento a openX, creo que la forma correcta sería sin **
y acaba de dar el dict. Pero obviamente Python no le gusta el segundo y me dice que di 3 en lugar de 2 argumentos. ¿Cuál es la razón detrás de esto?
Me pregunto por qué lo llamas '** args' en el código. Este es posiblemente el peor nombre posible ya que las personas lo confundirán con '* args' –
. Bueno, yo nunca uso * args, así que uso ** args ^^, pero bueno, puedo modificarlo. –