Как интерпретировать это предложение в Python (с точки зрения приоритета операторов)?Приоритет операторов Python
c = not a == 7 and b == 7
в c = not (a == 7 and b == 7)
или c = (not a) == 7 and b == 7
?
благодаря
Как интерпретировать это предложение в Python (с точки зрения приоритета операторов)?Приоритет операторов Python
c = not a == 7 and b == 7
в c = not (a == 7 and b == 7)
или c = (not a) == 7 and b == 7
?
благодаря
Использование dis
модуля:
>>> import dis
>>> def func():
... c = not a == 7 and b == 7
...
>>> dis.dis(func)
2 0 LOAD_GLOBAL 0 (a)
3 LOAD_CONST 1 (7)
6 COMPARE_OP 2 (==)
9 UNARY_NOT
10 JUMP_IF_FALSE_OR_POP 22
13 LOAD_GLOBAL 1 (b)
16 LOAD_CONST 1 (7)
19 COMPARE_OP 2 (==)
>> 22 STORE_FAST 0 (c)
25 LOAD_CONST 0 (None)
28 RETURN_VALUE
Таким образом, это выглядит следующим образом:
c = (not(a == 7)) and (b == 7)
Согласно documentation заказа, от низшего приоритета (минимум связывания) до самого высокого приоритет (наиболее обязательный):
and
not
==
Таким образом, выражение not a == 7 and b == 7
будет оцениваться следующим образом:
((not (a == 7)) and (b == 7))
^ ^ ^ ^
second first third first
Другими словами, дерево оценки будет выглядеть следующим образом:
and
/ \
not ==
| /\
== b 7
/\
a 7
И последнее, что было сделано, будет присвоить значение выражения c
.
Ссылка, которую вы указываете, указывает, что список упорядочен с наименьшим приоритетом до наивысшего приоритета, поэтому это будет '(not (a == 7)) и (b == 7) '. Если он был наивысшим до самого низкого, то, как вы говорите, это будет '((не a) == (7 и b)) == 7', так как' и 'будет иметь более высокий приоритет, чем' == '. –
@ EricFinn yup, моя ошибка - исправлена! –
http://docs.python.org/2/reference/expressions.html#operator-precedence – George