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/