Bruno Cauet added the comment: Here are the operations being emitted (line, macro used and eventual argument):
>>> f = lambda: (yield 5) 3487: ADDOP_O LOAD_CONST e->v.Num.n 3472: ADDOP YIELD_VALUE 1907: ADDOP_IN_SCOPE POP_TOP 4349: ADDOP_O LOAD_CONST Py_None 4350: ADDOP RETURN_VALUE 1457: ADDOP_O LOAD_CONST (PyObject*)co 1458: ADDOP_O LOAD_CONST qualname 1459: ADDOP_I MAKE_FUNCTION args 4349: ADDOP_O LOAD_CONST Py_None 4350: ADDOP RETURN_VALUE >>> def g(): return (yield 5) ... 3487: ADDOP_O LOAD_CONST e->v.Num.n 3472: ADDOP YIELD_VALUE 2533: ADDOP RETURN_VALUE 1457: ADDOP_O LOAD_CONST (PyObject*)co 1458: ADDOP_O LOAD_CONST qualname 1459: ADDOP_I MAKE_FUNCTION args 4349: ADDOP_O LOAD_CONST Py_None 4350: ADDOP RETURN_VALUE So there's an extra POP_TOP + LOAD_CONST Py_NONE for the lambda version that throws away the "123" (in the exemple). The attached patch (0001-...) fixes it. However please note that I'm not knowledgable about that part of the code and devised the patch empirically. Moreover a test should probably added but I did not know where (test_dis? tried and failed... see patch 0002-...). ---------- keywords: +patch nosy: +bru Added file: http://bugs.python.org/file38298/0001-lambda-generators-don-t-throw-away-stack-top.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue23192> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com