On 3/6/2016 4:23 AM, Christian Gollwitzer wrote:
Am 05.03.16 um 22:16 schrieb Terry Reedy:
Not now. A console is a REPL + text display to read from and print to.
The actual IDLE REPL is PyShell.ModifiedInterpreter, which subclasses
stdlib code.InteractiveInterpreter.  Most of the additions are for
interacting with the subprocess that runs user code.  You should start
instead with the base class.

The Shell text display is a subclass of a subclass of a class that
contains a subclass of Toplevel with the complete IDLE Menu and a Text
widget wrapper.  Again, this is too much baggage for an application
console.

The idlelib ColorDelegator syntax highlighter can be reused with a Text
instance.  See turtledemo.__main__ for an example.  I don't know if (or
how) IDLE's autocompletion modules could be reused in their current
state.  I believe Shell's history 'list' consists of the statements in
the Text instance prefixed by the '>>> ' prompt.

Thanks! I'll try to browse my way through the source code, these details
help a lot. I still haven't understood the difference between exec() and
eval(). I understand that for statements you want to exec them, for
expressions you eval it and print the result. When the user has entered
code, how does the REPL know if it should be eval'ed or exec'ed? I
assume that you don't try to parse the Python code manually to find this
out? Or you try to eval(), and if it doesn't compile, you exec()?

Python expressions are also statements. Python REPLs exec statements. But to make Read-Exec-Print work like traditional Read-Eval-Print, Python, in interactive mode, echos the value of expression statements (and assign it to _ for later reuse). So '2 + 2' echos 4 in REPL, or at least in the console and IDLE, '2 + 2' is useless in a program run in batch mode.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to