<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Sat, Jan 9, 2016 at 4:48 AM M.-A. Lemburg <<a href="mailto:mal@egenix.com">mal@egenix.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 09.01.2016 00:04, Guido van Rossum wrote:<br>
> Since Python 2 doesn't support function annotations we've had to look for<br>
> alternatives. We considered stub files, a magic codec, docstrings, and<br>
> additional `# type:` comments. In the end we decided that `# type:`<br>
> comments are the most robust approach. We've experimented a fair amount<br>
> with this and we have a proposal for a standard.<br>
><br>
> The proposal is very simple. Consider the following function with Python 3<br>
> annotations:<br>
><br>
>     def embezzle(self, account: str, funds: int = 1000000, *fake_receipts:<br>
> str) -> None:<br>
>         """Embezzle funds from account using fake receipts."""<br>
>         <code goes here><br>
><br>
> An equivalent way to write this in Python 2 is the following:<br>
><br>
>     def embezzle(self, account, funds=1000000, *fake_receipts):<br>
>         # type: (str, int, *str) -> None<br>
>         """Embezzle funds from account using fake receipts."""<br>
>         <code goes here><br>
<br>
By using comments, the annotations would not be available at<br>
runtime via an .__annotations__ attribute and every tool would<br>
have to implement a parser for extracting them.<br>
<br>
Wouldn't it be better and more in line with standard Python<br>
syntax to use decorators to define them ?<br>
<br>
    @typehint("(str, int, *str) -> None")<br>
    def embezzle(self, account, funds=1000000, *fake_receipts):<br>
        """Embezzle funds from account using fake receipts."""<br>
        <code goes here><br>
<br>
This would work in Python 2 as well and could (optionally)<br>
add an .__annotations__ attribute to the function/method,<br>
automatically create a type annotations file upon import,<br>
etc.<br></blockquote><div><br></div><div>The goal of the # type: comments as described is to have this information for offline analysis of code, not to make it available at run time.  Yes, a decorator syntax could be adopted if anyone needs that. I don't expect anyone does. Decorators and attributes would add run time cpu and memory overhead whether the information was going to be used at runtime or not (likely not; nobody is likely to <i>deploy</i> code that looks at __annotations__).</div><div><br></div><div>-gps<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
--<br>
Marc-Andre Lemburg<br>
eGenix.com<br>
<br>
Professional Python Services directly from the Experts (#1, Jan 09 2016)<br>
>>> Python Projects, Coaching and Consulting ...  <a href="http://www.egenix.com/" rel="noreferrer" target="_blank">http://www.egenix.com/</a><br>
>>> Python Database Interfaces ...           <a href="http://products.egenix.com/" rel="noreferrer" target="_blank">http://products.egenix.com/</a><br>
>>> Plone/Zope Database Interfaces ...           <a href="http://zope.egenix.com/" rel="noreferrer" target="_blank">http://zope.egenix.com/</a><br>
________________________________________________________________________<br>
<br>
::: We implement business ideas - efficiently in both time and costs :::<br>
<br>
   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48<br>
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg<br>
           Registered at Amtsgericht Duesseldorf: HRB 46611<br>
               <a href="http://www.egenix.com/company/contact/" rel="noreferrer" target="_blank">http://www.egenix.com/company/contact/</a><br>
                      <a href="http://www.malemburg.com/" rel="noreferrer" target="_blank">http://www.malemburg.com/</a><br>
<br>
_______________________________________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" target="_blank">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/codeofconduct/</a><br>
</blockquote></div></div>