这个例子中三元运算符的优先级是多少?

what is the precedence of a ternary operator in this example?

>>> 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 的计数器?

条件表达式有a very low precedence.

所以第一个表达式实际上被解析为:

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

这将在每次 c != '.' 时将 count 设置为 0。

因为这对应了if的True状态。

(True) if (Condition) else (Else)

count = count + 1 if c == '.' else 0 此(计数 + 1)的真实状态

count + (1 if c == '.' else 0) 此 (1) 的真实状态

我是不是说的有点复杂了?

在第一种情况下,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
>>>