【问题标题】:what is the precedence of a ternary operator in this example?在这个例子中,三元运算符的优先级是什么?
【发布时间】:2020-11-03 10:15:02
【问题描述】:
>>> 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 += 1 if c == '.' else 0 呢?

标签: python operator-precedence conditional-operator


【解决方案1】:

条件表达式有a very low precedence

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

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

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

【讨论】:

  • 不,当c等于'.'时,它将count设置为0。
  • 感谢您的链接。我认为我没有意识到 andor 没有相同的优先级(以及类似的按位等价物),尽管我总是在更多而不是更少的括号方面犯错,我从来没有被咬过它。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    (True) if (Condition) else (Else)

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

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

    我告诉你的有点复杂吗?

    【讨论】:

      猜你喜欢
      • 2011-10-25
      • 2023-03-07
      • 2010-12-19
      • 2017-10-13
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多