Усі необхідні параметри повинні бути розміщені перед будь-якими аргументами за замовчуванням. Просто тому, що вони є обов'язковими, тоді як аргументи за замовчуванням - ні. Синтаксично інтерпретатору було б неможливо вирішити, які значення відповідають аргументам, якщо дозволено змішані режими. A SyntaxErrorпіднімається, якщо аргументи не наводяться у правильному порядку:
Давайте розглянемо аргументи ключових слів, використовуючи вашу функцію.
def fun1(a="who is you", b="True", x, y):
... print a,b,x,y
Припустимо, йому дозволено оголошувати функцію як вище, то з вищезазначеними деклараціями ми можемо зробити наступні (регулярні) позиційні або ключові аргументи викликів:
func1("ok a", "ok b", 1) # Is 1 assigned to x or ?
func1(1) # Is 1 assigned to a or ?
func1(1, 2) # ?
Як ви запропонуєте призначити змінні у виклику функції, як будуть використовуватися аргументи за замовчуванням разом із аргументами ключових слів.
>>> def fun1(x, y, a="who is you", b="True"):
... print a,b,x,y
...
Довідка O'Reilly - Core-Python
Де ця функція використовує аргументи за замовчуванням, синтаксично правильні для вищезгаданих викликів функцій. Виклики аргументів ключових слів виявляються корисними для можливості надання позиційних аргументів поза замовленням, але в поєднанні з аргументами за замовчуванням вони також можуть бути використані і для "пропускання" відсутніх аргументів.
def myfunction(position_arguments, *arguments, **keywords):`....`