[Python-ideas] globals should accept parenteses for extending beyond 1 line

MRAB python at mrabarnett.plus.com
Mon Jan 23 16:29:51 EST 2017


On 2017-01-23 20:09, Nick Timkovich wrote:
> Related and probably more common is the need for the line-continuation
> operator for long/multiple context managers with "with". I assume that's
> come up before, but was it also just a low priority rather than any
> technical reason?
>
It has come up before, and there is a technical reason, namely the 
syntactic ambiguity when parsing. Not impossible to fix, but probably 
not worth the added complexity.

> On Mon, Jan 23, 2017 at 1:53 PM, Brett Cannon <brett at python.org
> <mailto:brett at python.org>> wrote:
>
>     Actually multi-line import doesn't work:
>
>     File ".\Untitled.py", line 1
>         import (tokenize,
>                ^
>     SyntaxError: invalid syntax
>
>     I think you're getting this mixed up with parentheses being allowed
>     in `from ... import (...)` syntax. So unless there is another
>     single-word keyword that allows multi-line arguments using
>     parentheses I don't think there's an inconsistency here.
>
>     Plus, as Guido pointed out, the current syntax isn't preventing you
>     from doing something you can already do. So if you want to add
>     parentheses support to global, nonlocal, and import, you can propose
>     a patch, but it's not a priority to solve without someone providing
>     a solution since it doesn't open up anything new for something
>     people don't use on a regular basis.
>
>
>     On Mon, 23 Jan 2017 at 11:39 João Matos <jcrmatos at gmail.com
>     <mailto:jcrmatos at gmail.com>> wrote:
>
>         Hello,
>
>         You are correct, my mistake. I should have written global and
>         not globals.
>
>         The purpose of using parentheses on the import statement is not
>         (in my
>         view) for operational efficiency but for appearance/cleaness.
>         The same applies to using it to global.
>
>         One does not need to have 10 global vars. It may have to do with var
>         name length and the 79 max line length.
>
>         This is an example from my one of my programs:
>         global existing_graph, expected_duration_in_sec, file_size, \
>              file_mtime, no_change_counter
>
>         Anyway, the use of global being rare is of no concern. The point
>         of my
>         suggestion is standardization.
>         My opinion is that a standard language is easier to learn (and
>         teach)
>         than one that has different syntax for the same issue, depending
>         on the
>         statement.
>
>         In short, if the recommended multi-line use for import is
>
>         import (a, b,
>              c)
>
>         instead of
>
>         import a, b, \
>              c
>
>         Then the same should apply to global.
>
>
>         Best regards,
>
>         JM
>
>
>
>
>         On 23-01-2017 19:25, Terry Reedy wrote:
>         > On 1/23/2017 1:43 PM, João Matos wrote:
>         >> Hello,
>         >>
>         >> I would like to suggest that globals should follow the
>         existing rule
>         >> (followed by the import statement, the if statement and in
>         other places)
>         >> for extending beyond 1 line using parentheses.
>         >> Like this:
>         >> globals (var_1, var_2,
>         >>     var_3)
>         >>
>         >> instead of what must be done now, which is:
>         >> globals var_1, var_2 \
>         >>     var_3
>         >
>         > The declaration keyword is 'global'; 'globals' is the built-in
>         > function.  In any case
>         >
>         > global var_1, var_2
>         > global var_3
>         >
>         > works fine.  There is no connection between the names and,
>         unlike with
>         > import, no operational efficiency is gained by mashing the
>         statements
>         > together.
>         >
>         > This issue should be rare.  The global statement is only
>         needed when
>         > one is rebinding global names within a function*.  If a function
>         > rebinds 10 different global names, the design should probably be
>         > re-examined.
>         >
>         > * 'global' at class scope seems useless.
>         >
>         > a = 0
>         > class C:
>         >     a = 1
>         >
>         > has the same effect as
>         > a = 0
>         > a = 1
>         > class C: pass
>         >



More information about the Python-ideas mailing list