Steven D'Aprano <[email protected]> added the comment:
This is not a bug, this is the design of function default arguments.
Default arguments in Python use *early binding*, which means they are
calculated once, when the function is declared, rather than *late binding*,
which means they are calculated each time the function is called.
You can get the effect of late binding by testing for None:
def func(time=None):
if time is None:
time = datetime.datetime.today()
print(time)
Neither choice is right or wrong, they both have advantages and disadvantages.
Python chooses early binding for function defaults, and late binding for
closures, which have their own, different, gotchas.
----------
nosy: +steven.daprano
resolution: -> not a bug
stage: -> resolved
status: open -> closed
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue38451>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com