[Python-ideas] Delayed Execution via Keyword

David Mertz mertz at gnosis.cx
Sat Feb 18 00:27:35 EST 2017


On Fri, Feb 17, 2017 at 2:35 PM, Joseph Hackman <josephhackman at gmail.com>
wrote:

> I think we should use the colon to make the delayed word (or whatever word
> is selected), unambiguously used in this way (and to prevent any existing
> code from breaking).
>
> On 17 February 2017 at 17:09, David Mertz <mertz at gnosis.cx> wrote:
>
>> That was a problem with the colon that occurred to me. I think it can't
>> be tokenized in function annotations.
>>
>
> I don't see any reason for delayed execution and function annotations to
> mix. i.e.
> def foo(delayed: bar):
>     pass
> would define a function that takes one argument, named delayed, of type
> bar.
>

I still think the colon is ugly and inconsistent with other Python uses.  I
know you are trying for analogy with lambda (which is related, yes).  But
the analogies with yield, yield from, async, and await feel much stronger
to me.  Also, 'lambda' *requires* the colon since it might take arguments
and that is necessary to tell when they end.[*]  'delayed' like those other
words I mention has no such need.

That said, I think you are right that it makes no sense to declare a
function signature with 'delayed' (or 'lazy', 'deferred', whatever word).
Calling it definitely! This feels important:

    x = foo(delayed very_complex_computation())

But in the definition signature it feels nonsensical, I agree.  However,
that still doesn't answer other uses of the colon:

    {delayed: 17}   # No idea if this is a set of one delayed object or a
dictionary
    lambda delayed: delayed: 17  # Just don't know where to start with this

All these problems simply go away if we drop the colon.


[*] i.e. what would this colon-free lambda mean: 'lambda a, b, c'? A
function of no arguments return a tuple? a function of three arguments?


-- 
Keeping medicines from the bloodstreams of the sick; food
from the bellies of the hungry; books from the hands of the
uneducated; technology from the underdeveloped; and putting
advocates of freedom in prisons.  Intellectual property is
to the 21st century what the slave trade was to the 16th.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170217/c391e1c9/attachment-0001.html>


More information about the Python-ideas mailing list