On Thu, Dec 2, 2021 at 6:12 PM <role.pythonorg-read...@jlassocs.com> wrote:
>
> Brendan Barnwell wrote:
> > > No.  As I mentioned in the earlier thread, I don't support any proposal
> > in which an argument can "have a default" but that default is not a
> > first-class Python object of some sort.
>
> What if a default is a function?
>
> I was inspired by learning Django and saw in models that fields can have a 
> default which is either a regular (early-bound) default such as a first-class 
> Python object as one would expect, *or* a function -- which will be called 
> 'later' when needed.
>
> That prompted me to contemplate a syntax for late-bound defaults, albeit a 
> bit clunky, but I did think it suited a special-case requirement met by 
> late-bound defaults. I still think that littering function arguments 
> throughout all code with large numbers of arrows would make things less 
> readable. Special requirements need special treatment, I'm thinking.
>
> The problem is passing arguments to such a function without it looking like 
> it's being called at definition time.
>

Also has the same problem of other deferreds, which is: when exactly
is it evaluated?

def func(stuff, n=>len(stuff)):
    stuff.append("spam")
    print(n)

func(["spam", "ham"])

What will this print? If it's a function default, it MUST print 2,
since len(stuff) is 2 as the function starts. But if it's a deferred
object of some sort, then it should probably print 3, since len(stuff)
is 3 at the time that n gets printed. Which is it to be?

That's why PEP 671 is *not* about generic deferred evaluation. It is
specifically about function default arguments, and guarantees that
they will be evaluated prior to the first line of code in the function
body.

ChrisA
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/7IQQ34WYQOJGSBMLWINYV4NSOAR6ZTOH/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to