Wszystkie wymagane parametry należy umieścić przed wszelkimi domyślnymi argumentami. Po prostu dlatego, że są obowiązkowe, podczas gdy domyślne argumenty nie. Składniowo interpretator nie byłby w stanie zdecydować, które wartości pasują do których argumentów, gdyby tryby mieszane były dozwolone. A SyntaxErrorjest podnoszone, jeśli argumenty nie są podane we właściwej kolejności:
Przyjrzyjmy się argumentom słów kluczowych, używając Twojej funkcji.
def fun1(a="who is you", b="True", x, y):
... print a,b,x,y
Załóżmy, że można zadeklarować funkcję jak powyżej.Następnie za pomocą powyższych deklaracji możemy wykonać następujące (zwykłe) wywołania argumentów pozycyjnych lub słów kluczowych:
func1("ok a", "ok b", 1) # Is 1 assigned to x or ?
func1(1) # Is 1 assigned to a or ?
func1(1, 2) # ?
Jak zasugerujesz przypisanie zmiennych w wywołaniu funkcji, jak będą używane domyślne argumenty wraz z argumentami słów kluczowych.
>>> def fun1(x, y, a="who is you", b="True"):
... print a,b,x,y
...
Odniesienie O'Reilly - Core-Python
Gdzie ta funkcja wykorzystuje domyślne argumenty poprawne składniowo dla powyższych wywołań funkcji. Wywoływanie argumentów słów kluczowych okazuje się przydatne, ponieważ umożliwia dostarczenie argumentów pozycyjnych spoza kolejności, ale w połączeniu z argumentami domyślnymi można ich również używać do „przeskakiwania” brakujących argumentów.
def myfunction(position_arguments, *arguments, **keywords):`....`