Nie rozumiem poniższego przykładu, powiedzmy, że mam te funkcje:
# 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
Dlaczego nr 1 jest właściwym rozwiązaniem, a nr 2 niewłaściwym? **kwargsjest w zasadzie dyktando, więc jeśli chcę przekazać argument do openX, myślę, że właściwy sposób byłby bez **i po prostu podając dyktando. Ale Python oczywiście nie lubi drugiego i mówi mi, że podałem 3 zamiast 2 argumentów. Więc jaki jest tego powód?
**argsw kodzie. To prawdopodobnie najgorsza możliwa nazwa, z którą ludzie będą je mylić*args