[Python-Dev] Why is there still a PRINT_EXPR opcode in Python 3?

Guido van Rossum guido at python.org
Mon Jan 5 20:48:26 CET 2009


On Mon, Jan 5, 2009 at 4:25 AM, Amaury Forgeot d'Arc <amauryfa at gmail.com> wrote:
> On Mon, Jan 5, 2009 at 00:53, Benjamin Peterson wrote:
>> On Sun, Jan 4, 2009 at 5:36 PM,  <skip at pobox.com> wrote:
>>>
>>>    >> Since print is now a builtin function why is there still a PRINT_EXPR
>>>    >> opcode?
>>>
>>>    Benjamin> I believe it's used in the interactive interpreter to display
>>>    Benjamin> the repr of an expression.
>>>
>>> Wouldn't it make more sense for the interactive interpreter to call
>>>
>>>    print(repr(expr))
>>
>> I'm not sure about the reasoning for keeping PRINT_EXPR alive. When I
>> look at the code of PyRun_InteractiveOne, it seems it should be
>> possible to kill it off.
>
> How would you display multiple lines, like:
>
>>>> for x in range(3):
> ...    x, x * x
> ...
> (0, 0)
> (1, 1)
> (2, 4)
>>>> if 1:
> ...   "some line"
> ...   "another line"
> ...
> 'some line'
> 'another line'
>
> OTOH this seems an obscure feature. "for" and "if" are statements after all.

That feature may be obscure but should not be killed. It'd be a bit
tricky to remove the PRINT_EXPR call since it doesn't invoke the
print() function -- it invokes something more basic that goes through
sys.displayhook. I don't care about the opcode, but the semantics
should remain unchanged. Keeping the opcode is probably easiest.

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list