Non capisco il seguente esempio, diciamo che ho queste funzioni:
# 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
Perché # 1 è la soluzione giusta e # 2 quella sbagliata? **kwargsè fondamentalmente un dict, quindi se voglio passare l'argomento a openX penso che il modo corretto sarebbe senza **e solo dare il dict. Ma a Python ovviamente non piace il secondo e mi dice che ho dato 3 invece di 2 argomenti. Quindi qual è il motivo dietro questo?
**argsnel codice. Questo è forse il peggior nome possibile poiché la gente lo confonderà*args