On Mon, Jul 23, 2018 at 10:48:23AM +0100, Steve Dower wrote: > On 23Jul2018 0151, Steven D'Aprano wrote: > >What if there was a language > >supported, non-hackish way to officially delay evaluation of > >expressions until explicitly requested? > > The current spelling for this is "lambda: delayed-expression" and the > way to request the value is "()". :) > > (I'm not even being that facetious here. People ask for delayed > expressions all the time, and it's only 7 characters, provided the > callee knows they're getting it, and the semantics are already well > defined and likely match what you want.)
I know you not being facetious, and delaying computation through a function call is not an awful solution. But its not a great solution either. Contrast the elegance of syntax with delayed evaluation: 1/x if x != 0 else func(y) versus the lambda solution: if_else(lambda: 1/x, x != 0, lambda: func(y))() For clarity, or perhaps the opposite *wink* I've kept the same order of arguments. It's not just the extra seven characters (plus spaces) per delayed expression, or the extra parentheses at the end to force evaluation, but the ease at which we can forget and write this: if_else(1/x, x != 0, func(y)) Anyway, it was just an idle thought, not in a state to compete with this PEP. And even if it were, I'd still prefer to see at least ?? as a dedicated operator rather than a function. -- Steve _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/