Я не понимаю следующий пример, допустим, у меня есть эти функции:
# 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
Почему № 1 - правильное решение, а № 2 - неправильное? **kwargsэто в основном диктат, поэтому, если я хочу передать аргумент openX, я думаю, что правильный путь был бы без **и просто дать диктат. Но python явно не нравится второй и говорит мне, что я дал 3 вместо 2 аргументов. Так в чем же причина?
**argsв коде? Возможно, это худшее из возможных имен, так как люди будут путать его с*args