Пожалуйста, помогите мне разобраться в следующей ситуации. Почему параметры по умолчанию принимают значения позиционных аргументов?
Код:
def func(a, b, c = "value by default", d = "one more value by default", *args, e, **kwargs):
print("'a' is: ", a)
print("'b' is: ", b)
print("'c' is: ", c)
print("'d' is: ", d)
print("'args' is: ", args)
print("'e' is: ", e)
print("'kwargs' is: ", kwargs)
return a, b, c, d, args, e, kwargs
func('A', 'B', 3, 4, 5, e = 12, f = 20, g = 30)
Вывод
# 'a' is: A
# 'b' is: B
# 'c' is: 3
# 'd' is: 4
# 'args' is: (5,)
# 'e' is: 12
# 'kwargs' is: {'f': 20, 'g': 30}
Я ждал другого результата, например:
# 'a' is: A
# 'b' is: B
# 'c' is: "value by default"
# 'd' is: "one more value by default"
# 'args' is: (3, 4, 5)
# 'e' is: 12
# 'kwargs' is: {'f': 20, 'g': 30}
И если я попытаюсь вызовите функцию следующим образом:
# func('A', 'B', 3, 4, 5, c = "C", d = "D",e = 12, f = 20, g = 30)
Я получил такую ошибку # TypeError: func() got multiple values for argument 'c'
Похоже, я могу использовать параметры ключевых слов по умолчанию без дополнительных аргументов * args. Вот так:
func('A', 'B', c = "C", d = "D", e = 12, f = 20, g = 30)
Вывод:
# 'a' is: A
# 'b' is: B
# 'c' is: C
# 'd' is: D
# 'args' is: ()
# 'e' is: 12
# 'kwargs' is: {'f': 20, 'g': 30}