Python 条件的顺序是否影响性能?

Python 条件的顺序是否影响性能?,python,performance,conditional-statements,Python,Performance,Conditional Statements,根据脚本的速度,我在Python中如何排序条件是否重要?例如,在SQL中,解释程序假设哪种条件排序最快,它就不会这样做 据我所知,在Python中,条件的顺序将按照解释器给出的顺序执行。因此,作为一个例子,如果我链接或条件,是否最好按照假设的条件所消耗的时间来排序,因为当第一个条件无论如何都不适用时,解释器甚至停止寻找其他条件?是的,条件的顺序很重要。它们是从左到右求值的,除非您使用括号(例如)进行更改 是的,只有当表达式的结果还不清楚时,才会计算条件。例如,在 if 1==0 and foo*

根据脚本的速度,我在Python中如何排序条件是否重要?例如,在SQL中,解释程序假设哪种条件排序最快,它就不会这样做


据我所知,在Python中,条件的顺序将按照解释器给出的顺序执行。因此,作为一个例子,如果我链接或条件,是否最好按照假设的条件所消耗的时间来排序,因为当第一个条件无论如何都不适用时,解释器甚至停止寻找其他条件?

是的,条件的顺序很重要。它们是从左到右求值的,除非您使用括号(例如)进行更改

是的,只有当表达式的结果还不清楚时,才会计算条件。例如,在

if 1==0 and foo**10000 > 2:

Python将立即返回False,甚至不会尝试计算foo**10000。

Python不会像SQL那样对条件进行重新排序,但它会。这意味着它将尽快停止评估。所以,如果您有if True==True或long_函数调用:,long_函数调用将永远不会被计算。这同样适用于if True==False和long_函数调用:。在编写条件语句时考虑这一点将是您最大的兴趣,并且可以导致性能的改变。

< PythPothon中的布尔运算符是-只要表达式的结果是明确的,评价就停止。这在Python的后期绑定中起着重要作用

例如,这是一种常见检查:

def do(condition_check=None):
    if condition_check is not None and condition_check():
        # do stuff
Python通常对过早的优化非常保守。如果有任何可能发生故障,Python不会尝试

如果要检查解释器优化,请尝试dis模块。它显示了Python核心实际运行的指令。例如,Python将解析常量表达式10**10=>1000000000,并在出现错误或弹出时退出和提前跳转


请注意,甚至pypy也没有对这段代码进行任何进一步的优化

答案很好,除了10000**10000是由编译器计算的。foo**10000可能是一个更好的例子。谢谢你的建议!好多了。
dis.dis('1==0 and 10**10 > 2')
  1           0 LOAD_CONST               0 (1)
              3 LOAD_CONST               1 (0)
              6 COMPARE_OP               2 (==)
              9 JUMP_IF_FALSE_OR_POP    21
             12 LOAD_CONST               4 (10000000000)
             15 LOAD_CONST               3 (2)
             18 COMPARE_OP               4 (>)
        >>   21 RETURN_VALUE