On Tue, May 26, 2020 at 8:06 AM Paul Sokolovsky <[email protected]> wrote:
>
> Hello,
>
> The more worrying sounds the idea to have a special evaluation context
> for specially marked default arguments. Just imagine - *everywhere* (#1)
> in the language the evaluation is eager, while for specially marked
> default arguments it's deferred. Which leads to the situation that:
>
> def foo(x := a + b)
>
> vs
>
> c = a + b
> def foo(x := c)
>
> can lead to different results.
def foo(x = None):
if x is None: x = a + b
c = a + b
def foo(x = None):
if x is None: x = c
Is it surprising that these behave differently? You are refactoring
something from a late-bound default argument value into a global
variable. Surely it's obvious that it will now be evaluated once?
> I'd suggest that people should love "explicit is better than implicit"
> principle of the language.
Explicit meaning that you need to use a specific symbol that means
"this is to be late-bound"?
Or explicit meaning "something that I like", as opposed to implicit
meaning "something that I don't like", which is how most people seem
to interpret that line of the Zen?
ChrisA
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/KC3E227LDMKC6JFY6C2EVKUMXZ4UBW77/
Code of Conduct: http://python.org/psf/codeofconduct/