【问题标题】:True/False vs integers when dealing with booleans in Python在 Python 中处理布尔值时的真/假与整数
【发布时间】:2018-06-23 10:46:31
【问题描述】:

在 Python 中,TrueFalse 分别与 10 具有相同的真值。

除了风格问题,我想知道从时间效率的角度来看,使用1/0 是否比使用True/False 产生更好的性能。

【问题讨论】:

  • 极不可能比 1/0 更好。但很容易测试。
  • 没有任何效率差异。 可能使用if x:if x == True: 之间存在差异。
  • 很多东西都有相同的真值,例如[] -> False,因此成语 if my_list: 而不是 if len(my_list) > 0:。这似乎是过早优化的定义;您是否尝试通过切换来解决一些问题?请注意,布尔值实际上是整数(在 CPython 中,至少是 - isinstance(True, int))。
  • @jonrsharpe 实际上我有一个朋友一直使用整数代替布尔值。我只是想确定没有真正的理由不使用True/False
  • 这种习惯可能来自另一种语言,在 Python 中完全没有必要(而且只会让代码不易阅读)。但如果您想知道他们为什么这样做,何不问他们?

标签: python performance boolean boolean-expression


【解决方案1】:

其实bool继承自int

>>> bool.__bases__
(<class 'int'>,)
>>> True + 1
2

您应该避免微优化,除非您在代码之前和之后分析代码。如果您需要提高计算速度,您也可以尝试在 Cython 中使用 C 类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2013-12-09
    相关资源
    最近更新 更多