[Python-Dev] Issues with PEP 482 (1)

Yury Selivanov yselivanov.ml at gmail.com
Tue Apr 28 21:19:52 CEST 2015


Mark,

I'm sorry but you have to view the proposal as a whole. Discussing it 
point by point in isolation doesn't make any sense, as with any complex 
subject.

Thanks,
Yury

On 2015-04-28 2:44 PM, Mark Shannon wrote:
> Hi,
>
> I still think that there are several issues that need addressing with 
> PEP 492. This time, one issue at a time :)
>
> "async"
>
> The "Rationale and Goals" of PEP 492 states that PEP 380 has 3 
> shortcomings.
> The second of which is:
>     """It is not possible to natively define a coroutine which has no 
> yield or yield from statements."""
>    This is incorrect, although what is meant by 'natively' is unclear.
>
> A coroutine without a yield statement can be defined simply and 
> concisely, thus:
>
> @coroutine
> def f():
>     return 1
>
> This is only a few character longer than the proposed new syntax,
> perfectly explicit and requires no modification the language whatsoever.
> A pure-python definition of the "coroutine" decorator is given below.
>
> So could the "Rationale and Goals" be correctly accordingly, please.
> Also, either the "async def" syntax should be dropped, or a new 
> justification is required.
>
> Cheers,
> Mark.
>
>
> #coroutine.py
>
> from types import FunctionType, CodeType
>
> CO_COROUTINE = 0x0080
> CO_GENERATOR = 0x0020
>
> def coroutine(f):
>     'Converts a function to a generator function'
>     old_code = f.__code__
>     new_code = CodeType(
>         old_code.co_argcount,
>         old_code.co_kwonlyargcount,
>         old_code.co_nlocals,
>         old_code.co_stacksize,
>         old_code.co_flags | CO_GENERATOR | CO_COROUTINE,
>         old_code.co_code,
>         old_code.co_consts,
>         old_code.co_names,
>         old_code.co_varnames,
>         old_code.co_filename,
>         old_code.co_name,
>         old_code.co_firstlineno,
>         old_code.co_lnotab,
>         old_code.co_freevars,
>         old_code.co_cellvars)
>     return FunctionType(new_code, f.__globals__)
>
>
> P.S. The reverse of this decorator, which unsets the flags, converts a 
> generator function into a normal function. :?
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: 
> https://mail.python.org/mailman/options/python-dev/yselivanov.ml%40gmail.com



More information about the Python-Dev mailing list