【问题标题】:How does Python handle boolean values with multiple conditions?Python 如何处理具有多个条件的布尔值?
【发布时间】:2013-01-06 09:48:17
【问题描述】:

如果我有一个基于两个或多个条件返回布尔值的函数,Python 会检查每个条件吗?

更具体地说,这是一个理论函数:

def f(x, y):
    return x < y and f2(x, y) == 1

如果f2 需要一段时间才能执行,我应该将f 更改为此吗?

def f(x, y):
    if x >= y: return False
    return f2(x, y) == 1

如果x 大于或等于y 因为and 在前面,Python 会自动返回 False 吗?
两者哪个更快,为什么?

我的问题同样适用于or 语句,如果第一个条件为真,它会继续评估下一个条件吗?

【问题讨论】:

  • 这不是关于if 语句,而是关于andor 表达式。 (鉴于您的 return 声明,您显然已经猜到了。)
  • 另外,值得知道如何自己测试:写def f2(x, y): print('f2 ran'),然后调用f(0, 1),看看它是否打印任何东西。 (如果没有,您仍然需要检查文档以确保语言能够保证这一点……但如果确实如此,您就会知道 Python 不会短路。)

标签: python performance if-statement python-2.7 return


【解决方案1】:

来自the docs:“布尔运算符andor 是所谓的短路运算符:它们的参数是从左到右计算的,一旦确定结果就停止计算。”

【讨论】:

  • 向文档添加链接可能会更好,而不仅仅是引用它们。但除此之外,+1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多