Я не розумію наступного прикладу, скажемо, що я маю ці функції:
# 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