>>> 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?
Условные выражения имеют очень низкий приоритет .
Таким образом, первое выражение фактически анализируется как:
count = (count + 1) if c == '.' else 0
Это будет устанавливать count в 0 каждый время c != '.'.
count
c != '.'
В первом случае заменяется 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 >>>
Потому что это соответствует истинному состоянию if.
(True) if (Condition) else (Else)
count = count + 1 if c == '.' else 0 Истинный статус для этого (count + 1)
count = count + 1 if c == '.' else 0
count + (1 if c == '.' else 0) True статус для этого (1)
count + (1 if c == '.' else 0)
Я вам сказал немного сложнее?