a + not b

MRAB python at mrabarnett.plus.com
Wed Mar 3 23:08:40 EST 2021


On 2021-03-04 03:39, Avi Gross via Python-list wrote:
> As a guess, Rob, precedence rules for not may not bind as strongly as you think.
> 
> 1 + (not 1)
> 
> With parentheses, "not 1" is a subexpression that should be performed first and might return the value "False"
> 
> 1 + False
> 
> treats False in a numeric context as a zero so evaluates to 1.
> 
> But
> 
> 1 + not 1
> 
> Looks a bit ambiguous as "+ " expects something it considers a number or that can be converted to a number. Without parentheses, it may try to do
> 
> 1 + not
> 
> Which gets the same Syntax error.
> 
> I looked and operator "not" is evaluated much later than "+" and just before "and" and "or" so you need parentheses to force the interpretation you may intend. Similarly, some used of "and" require parentheses as do other operators.
> If you look through the grammar, the relevant bits are:

     sum: sum '+' term
     term: factor
     factor: power
     power: await_primary
     await_primary: primary
     primary: atom

and an 'atom' can be a number, etc, but can never start with "not".

A 'primary' can be an 'atom' and can have a subscript.

> -----Original Message-----
> From: Python-list <python-list-bounces+avigross=verizon.net at python.org> On Behalf Of Rob Cliffe via Python-list
> Sent: Wednesday, March 3, 2021 10:19 PM
> To: Python <python-list at python.org>
> Subject: a + not b
> 
> I can't work out why
>       1 + - 1
>       1 + (not 1)
> are legal syntax, but
>       1 + not 1
> isn't.
> Is there a good reason for this?
> Thanks
> Rob Cliffe
> 


More information about the Python-list mailing list