mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
evaluate positional defaults before keyword-only defaults (closes #16967)
This commit is contained in:
parent
34a2a87d17
commit
1ef876cd28
7 changed files with 161 additions and 147 deletions
|
|
@ -493,14 +493,15 @@ case the parameter's default value is substituted. If a parameter has a default
|
|||
value, all following parameters up until the "``*``" must also have a default
|
||||
value --- this is a syntactic restriction that is not expressed by the grammar.
|
||||
|
||||
**Default parameter values are evaluated when the function definition is
|
||||
executed.** This means that the expression is evaluated once, when the function
|
||||
is defined, and that the same "pre-computed" value is used for each call. This
|
||||
is especially important to understand when a default parameter is a mutable
|
||||
object, such as a list or a dictionary: if the function modifies the object
|
||||
(e.g. by appending an item to a list), the default value is in effect modified.
|
||||
This is generally not what was intended. A way around this is to use ``None``
|
||||
as the default, and explicitly test for it in the body of the function, e.g.::
|
||||
**Default parameter values are evaluated from left to right when the function
|
||||
definition is executed.** This means that the expression is evaluated once, when
|
||||
the function is defined, and that the same "pre-computed" value is used for each
|
||||
call. This is especially important to understand when a default parameter is a
|
||||
mutable object, such as a list or a dictionary: if the function modifies the
|
||||
object (e.g. by appending an item to a list), the default value is in effect
|
||||
modified. This is generally not what was intended. A way around this is to use
|
||||
``None`` as the default, and explicitly test for it in the body of the function,
|
||||
e.g.::
|
||||
|
||||
def whats_on_the_telly(penguin=None):
|
||||
if penguin is None:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue