каков приоритет тернарного оператора в этом примере? - PullRequest
2 голосов
/ 14 июля 2020
>>> count = 0
>>> for c in "##.#.":
...     count = count + 1 if c == '.' else 0
... 
>>> print(count)
1
>>> count = 0
>>> for c in "##.#.":
...     count = count + (1 if c == '.' else 0)
... 
>>> print(count)
2

Почему в первом примере не выводится счетчик 2?

Ответы [ 3 ]

2 голосов
/ 14 июля 2020

Условные выражения имеют очень низкий приоритет .

Таким образом, первое выражение фактически анализируется как:

count = (count + 1) if c == '.' else 0

Это будет устанавливать count в 0 каждый время c != '.'.

0 голосов
/ 14 июля 2020

В первом случае заменяется count значение

>>> for c in "##.#.":
...     count = count + 1 if c == '.' else 0
...     print (count)
... 
0
0
1
0
1

Здесь count получает добавление

>>> count=0
>>> for c in "##.#.":
...     count = count + (1 if c == '.' else 0)
...     print (count)
... 
0
0
1
1
2
>>> 
0 голосов
/ 14 июля 2020

Потому что это соответствует истинному состоянию if.

(True) if (Condition) else (Else)

count = count + 1 if c == '.' else 0 Истинный статус для этого (count + 1)

count + (1 if c == '.' else 0) True статус для этого (1)

Я вам сказал немного сложнее?

...