这个例子中三元运算符的优先级是多少?
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
>>>
>>> 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
>>>