Почему ключевые параметры (по умолчанию) принимают значения позиционных аргументов? - PullRequest
0 голосов
/ 21 февраля 2020

Пожалуйста, помогите мне разобраться в следующей ситуации. Почему параметры по умолчанию принимают значения позиционных аргументов?

Код:

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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...