在此示例中,三元运算符的优先级是什么?

时间:2020-07-14 06:10:06

标签: python operator-precedence conditional-operator

>>> 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 个答案:

答案 0 :(得分:2)

条件表达式中有a very low precedence

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

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

每次count会将c != '.'设置为0。

答案 1 :(得分:0)

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

答案 2 :(得分:-3)

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

(True) if (Condition) else (Else)

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

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

我告诉你有点复杂吗?