Why Can't Default Arguments Precede Required Arguments?
In Python, a SyntaxError is raised when non-default arguments follow default arguments in a function's parameter list. This restriction exists to ensure the unambiguous interpretation of argument values by the interpreter.
Consider the following function definition:
def fun1(a="who is you", b="True", x, y): print a, b, x, y
This code will raise a SyntaxError because the required parameters x and y follow the default parameters a and b.
Required Arguments Take Precedence
Required parameters must always be placed before any default parameters in a function's parameter list. This is because required parameters are mandatory, while default parameters are optional. Syntactically, the interpreter would not be able to determine which values match which arguments if they were mixed.
Example
The following code runs without errors because the required parameters x and y are placed before the default parameters a and b:
def fun1(x, y, a="who is you", b="True"): print a, b, x, y
Keyword Arguments
Keyword arguments can be used to call a function with arguments in any order. However, the order of the parameters in the function's parameter list still governs which values are assigned to which arguments.
For example, with the above function definition:
def fun1(x, y, a="who is you", b="True"): print a, b, x, y
The following code is valid:
fun1("ok a", "ok b", 1) # 1 is assigned to x, "ok a" to a, "ok b" to b, "True" to y
However, if the parameters were not declared with default values:
def fun1(x, y, a, b): print a, b, x, y
The following code would raise a TypeError:
fun1("ok a", "ok b", 1) # 3 arguments instead of 4
Therefore, default arguments are useful for allowing optional arguments or for skipping missing arguments when using keyword arguments.
The above is the detailed content of Why must required arguments precede default arguments in Python function definitions?. For more information, please follow other related articles on the PHP Chinese website!