【问题标题】:Python - order of conditions in IF statement with AND OperatorPython - 带有 AND 运算符的 IF 语句中的条件顺序
【发布时间】:2020-06-16 22:45:25
【问题描述】:

当我们有多个and 语句时,依赖表达式的顺序是一种好习惯吗?

更准确地说,我有一个字符串(该字符串有时可能是 None )并且根据它的长度我想要一些操作。以下是好代码吗?

import os

mystr = os.getenv('MYSTR_ENV_VAR')

if mystr and len(mystr)>10:
    print('do sth')
else:
    print('do sth else')

注意当mystrNone时,代码len(mystr)如果执行会抛出错误。因此,我依靠 if 语句首先确保 mystr 不为空或 None,然后评估长度。这段代码有效,如果它是安全的,逻辑适合我的需要。这是正确的 Pythonic 方式吗?

【问题讨论】:

标签: python conditional-statements lazy-evaluation


【解决方案1】:

Python 懒惰地评估布尔条件。所以你的代码是安全的,因为 if 语句会首先检查你的字符串是否存在。

来自docs

表达式x and y首先计算x;如果 x 为假,则返回其值;否则,计算 y 并返回结果值。

表达式x or y首先计算x;如果 x 为真,则其值为 回来;否则,对 y 求值,结果值为 返回。

【讨论】:

    【解决方案2】:

    检查Python 3.x 的文档,运算符支持短路,即如果第一个表达式在and 复合测试中未通过if 测试,则不会评估后续测试

    对于or

    这是一个短路运算符,所以它只在第一个参数为假时计算第二个参数。

    对于and

    这是一个短路运算符,所以它只在第一个参数为真时计算第二个参数。

    【讨论】:

      猜你喜欢
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2012-11-04
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2021-04-01
      相关资源
      最近更新 更多