![](https://secure.gravatar.com/avatar/d67ab5d94c2fed8ab6b727b62dc1b213.jpg?s=120&d=mm&r=g)
On Sun, Oct 31, 2021 at 9:20 AM Paul Moore <p.f.moore@gmail.com> wrote:
On Sat, 30 Oct 2021 at 23:13, Brendan Barnwell <brenbarn@brenbarn.net> wrote:
On 2021-10-30 15:07, David Mertz, Ph.D. wrote:
I'm -100 now on "deferred evaluation, but contorted to be useless outside of argument declarations."
At first I thought it might be harmless, but nothing I really care about. After the discussion, I think the PEP would be actively harmful to future Python features.
I'm not sure I'm -100, but still a hard -1, maybe -10.
I agree it seems totally absurd to add a type of deferred expression but restrict it to only work inside function definitions. That doesn't make any sense. If we have a way to create deferred expressions we should try to make them more generally usable.
I was in favour of the idea, but having seen the implications I'm now -0.5, moving towards -1. I'm uncomfortable with *not* having a "proper" mechanism for building signature objects and other introspection (I don't consider having the expression as a string and requiring consumers to eval it, to be "proper"). And so, I think the implication is that this feature would need some sort of real deferred expression to work properly - and I'd rather deferred expressions were defined as a standalone mechanism, where the full range of use cases (including, but not limited to, late-bound defaults!) can be considered.
Bear in mind that the status quo is, quite honestly, a form of white lie. In the example of bisect: def bisect(a, hi=None): ... def bisect(a, hi=>len(a)): ... neither form of the signature will actually say that the default value is the length of a. In fact, I have never said that the consumer should eval it. There is fundamentally no way to determine the true default value for hi without first figuring out what a is. So which is better: to have the value None, or to have a marker saying "this will be calculated later, and here's a human-readable description: len(a)"? I know that status quo wins a stalemate, but you're holding the new feature to a FAR higher bar than current idioms. ChrisA