Re: REPL with multiple function definitions

2022-06-28 Thread Chris Angelico
On Wed, 29 Jun 2022 at 11:00, Rob Cliffe via Python-list
 wrote:
>
> On 26/06/2022 23:22, Jon Ribbens via Python-list wrote:
> > On 2022-06-26, Rob Cliffe  wrote:
> >> This 2-line program
> >>
> >> def f(): pass
> >> def g(): pass
> >>
> >> runs silently (no Exception).  But:
> >>
> >> 23:07:02 c:\>python
> >> Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32
> >> bit (Intel)] on win32
> >> Type "help", "copyright", "credits" or "license" for more information.
> > def f(): pass
> >> ... def g(): pass
> >> File "", line 2
> >>   def g(): pass
> >>   ^
> >> SyntaxError: invalid syntax
> >> Is there a good reason for this?
> > For some reason, the REPL can't cope with one-line blocks like that.
> > If you put a blank line after each one-block line then it will work.
> It's actually not to do with 1-line blocks, just attempting to define 2
> functions "at once":
>
>
> 22:27:23 C:\>python
> Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32
> bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>  >>> def f():
> ... return 42
> ... def g():
>File "", line 3
>  def g():
>  ^
> SyntaxError: invalid syntax
>  >>>
>
> But you are right that adding a blank line after the first function
> definition solves the "problem".

And if you have something where you want to copy and paste multiple
statements, there are a few ways to do it:

1) Put "if 1:" at the top. That makes it a single block, so you can
paste in as much as you like, as long as the only blank line is at the
end.

2) Put the code into a file and then use "python3 -i setup.py". That
runs all the code, then drops you into the REPL in that context.

3) Put the code into a file, and inside the REPL, "from setup import
*". Unlike option 2, this can be done after the beginning of the
session. Downside: editing setup.py and reimporting won't apply your
changes.

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


Re: REPL with multiple function definitions

2022-06-28 Thread Rob Cliffe via Python-list

On 26/06/2022 23:22, Jon Ribbens via Python-list wrote:

On 2022-06-26, Rob Cliffe  wrote:

This 2-line program

def f(): pass
def g(): pass

runs silently (no Exception).  But:

23:07:02 c:\>python
Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32
bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

def f(): pass

... def g(): pass
    File "", line 2
      def g(): pass
      ^
SyntaxError: invalid syntax
Is there a good reason for this?

For some reason, the REPL can't cope with one-line blocks like that.
If you put a blank line after each one-block line then it will work.
It's actually not to do with 1-line blocks, just attempting to define 2 
functions "at once":



22:27:23 C:\>python
Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32 
bit (Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.
>>> def f():
... return 42
... def g():
  File "", line 3
    def g():
    ^
SyntaxError: invalid syntax
>>>

But you are right that adding a blank line after the first function 
definition solves the "problem".

Rob Cliffe


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


Re: REPL with multiple function definitions

2022-06-27 Thread Jon Ribbens via Python-list
On 2022-06-26, Rob Cliffe  wrote:
> This 2-line program
>
> def f(): pass
> def g(): pass
>
> runs silently (no Exception).  But:
>
> 23:07:02 c:\>python
> Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32 
> bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
> >>> def f(): pass
> ... def g(): pass
>    File "", line 2
>      def g(): pass
>      ^
> SyntaxError: invalid syntax
> >>>
>
> Is there a good reason for this?

For some reason, the REPL can't cope with one-line blocks like that.
If you put a blank line after each one-block line then it will work.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: REPL with multiple function definitions

2022-06-26 Thread Roel Schroeven

Rob Cliffe via Python-list schreef op 27/06/2022 om 0:14:

This 2-line program

def f(): pass
def g(): pass

runs silently (no Exception).  But:

23:07:02 c:\>python
Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32
bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
  >>> def f(): pass
... def g(): pass
    File "", line 2
      def g(): pass
      ^
SyntaxError: invalid syntax
  >>>

Is there a good reason for this?
The REPL requires an extra empty line to indicate the end of multi-line 
constructs. You can see it by the prompt: as long as the REPL prints 
'... '  as prompt, that means it puts everything you type in the same 
multi-line construct. To enter a new multi-line construct (such as a 
function definition, a for-loop, an if-statement, ...), press enter 
directly at the prompt; the REPL should than use '>>> ' as the prompt again.


(Alternatives like IPython (https://ipython.readthedocs.io/en/stable/) 
are a bit more loose regarding how to enter multi-line constructs)


--
"Iceland is the place you go to remind yourself that planet Earth is a
machine... and that all organic life that has ever existed amounts to a greasy
film that has survived on the exterior of that machine thanks to furious
improvisation."
-- Sam Hughes, Ra

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


Re: REPL with multiple function definitions

2022-06-26 Thread Chris Angelico
On Mon, 27 Jun 2022 at 08:15, Rob Cliffe via Python-list
 wrote:
>
> This 2-line program
>
> def f(): pass
> def g(): pass
>
> runs silently (no Exception).  But:
>
> 23:07:02 c:\>python
> Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32
> bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>  >>> def f(): pass
> ... def g(): pass
>File "", line 2
>  def g(): pass
>  ^
> SyntaxError: invalid syntax
>  >>>
>
> Is there a good reason for this?

The REPL compiles one statement at a time. A file is allowed to
contain multiple statements.

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


REPL with multiple function definitions

2022-06-26 Thread Rob Cliffe via Python-list

This 2-line program

def f(): pass
def g(): pass

runs silently (no Exception).  But:

23:07:02 c:\>python
Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32 
bit (Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.
>>> def f(): pass
... def g(): pass
  File "", line 2
    def g(): pass
    ^
SyntaxError: invalid syntax
>>>

Is there a good reason for this?
Thanks
Rob Cliffe
--
https://mail.python.org/mailman/listinfo/python-list