Todos los parámetros requeridos deben colocarse antes de cualquier argumento predeterminado. Simplemente porque son obligatorios, mientras que los argumentos predeterminados no lo son. Sintácticamente, sería imposible para el intérprete decidir qué valores coinciden con qué argumentos si se permitieran modos mixtos. Se SyntaxErrorgenera A si los argumentos no se dan en el orden correcto:
Echemos un vistazo a los argumentos de palabras clave, utilizando su función.
def fun1(a="who is you", b="True", x, y):
... print a,b,x,y
Supongamos que está permitido declarar la función como se indica arriba. Luego, con las declaraciones anteriores, podemos hacer las siguientes llamadas de argumentos posicionales o de palabras clave:
func1("ok a", "ok b", 1) # Is 1 assigned to x or ?
func1(1) # Is 1 assigned to a or ?
func1(1, 2) # ?
Cómo sugerirá la asignación de variables en la llamada a la función, cómo se utilizarán los argumentos predeterminados junto con los argumentos de palabras clave.
>>> def fun1(x, y, a="who is you", b="True"):
... print a,b,x,y
...
Referencia O'Reilly - Core-Python
Donde, como esta función, utiliza los argumentos predeterminados sintácticamente correctos para las llamadas a funciones anteriores. La invocación de argumentos de palabras clave resulta útil para poder proporcionar argumentos posicionales fuera de orden, pero, junto con los argumentos predeterminados, también se pueden usar para "omitir" los argumentos faltantes.
def myfunction(position_arguments, *arguments, **keywords):`....`