Todos os parâmetros necessários devem ser colocados antes de qualquer argumento padrão. Simplesmente porque eles são obrigatórios, enquanto argumentos padrão não são. Sintaticamente, seria impossível para o intérprete decidir quais valores correspondem a quais argumentos se modos mistos fossem permitidos. A SyntaxError
é gerado se os argumentos não forem fornecidos na ordem correta:
Vamos dar uma olhada nos argumentos das palavras-chave, usando sua função.
def fun1(a="who is you", b="True", x, y):
... print a,b,x,y
Suponha que seja permitido declarar a função como acima. Em seguida, com as declarações acima, podemos fazer as seguintes chamadas de argumento de posição ou de palavra-chave (regulares):
func1("ok a", "ok b", 1) # Is 1 assigned to x or ?
func1(1) # Is 1 assigned to a or ?
func1(1, 2) # ?
Como você sugerirá a atribuição de variáveis na chamada de função, como os argumentos padrão serão usados junto com os argumentos das palavras-chave.
>>> def fun1(x, y, a="who is you", b="True"):
... print a,b,x,y
...
Referência O'Reilly - Core-Python
Onde, como esta função, utilize os argumentos padrão sintaticamente corretos para as chamadas de função acima. A chamada de argumentos de palavras-chave se mostra útil por poder fornecer argumentos posicionais fora de ordem, mas, juntamente com argumentos padrão, eles também podem ser usados para "pular" argumentos ausentes.
def myfunction(position_arguments, *arguments, **keywords):
`....`