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

2015年4月28日 11:46:59 -0700

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
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to