<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Feb 17, 2017 at 2:35 PM, Joseph Hackman <span dir="ltr"><<a href="mailto:josephhackman@gmail.com" target="_blank">josephhackman@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">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).<br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On 17 February 2017 at 17:09, David Mertz <span dir="ltr"><<a href="mailto:mertz@gnosis.cx" target="_blank">mertz@gnosis.cx</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">That was a problem with the colon that occurred to me. I think it can't be tokenized in function annotations.</div></blockquote><div><br></div></span><div>I don't see any reason for delayed execution and function annotations to mix. i.e.</div><div>def foo(delayed: bar):</div><div>    pass</div><div>would define a function that takes one argument, named delayed, of type bar.</div></div></div></div></blockquote><div><br></div><div>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.</div><div><br></div><div>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:</div><div><br></div><div>    x = foo(delayed very_complex_computation())</div><div><br></div><div>But in the definition signature it feels nonsensical, I agree.  However, that still doesn't answer other uses of the colon:</div><div><br></div><div>    {delayed: 17}   # No idea if this is a set of one delayed object or a dictionary</div><div>    lambda delayed: delayed: 17  # Just don't know where to start with this</div><div><br></div><div>All these problems simply go away if we drop the colon.</div><div><br></div><div><br></div><div>[*] 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?</div></div><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Keeping medicines from the bloodstreams of the sick; food <br>from the bellies of the hungry; books from the hands of the <br>uneducated; technology from the underdeveloped; and putting <br>advocates of freedom in prisons.  Intellectual property is<br>to the 21st century what the slave trade was to the 16th.<br></div>
</div></div>