python语句分为和复合语句_python – 复合if语句更快,还是多个if语句?

在我的机器上使用IPython

In [1]: foo = True

In [2]: bar = False

In [3]: baz = True

In [4]: %%timeit

...: if foo and not bar and baz:

...: lambda: None

1000000 loops, best of 3: 265 ns per loop

In [5]: %%timeit

...: if foo:

...: if not bar:

...: if baz:

...: lambda: None

1000000 loops, best of 3: 275 ns per loop

如果将它拆分,看起来有10ns的开销.如果10ns很重要,你应该使用另一种语言.

所以对于所有实际目的,不,没有区别.

如果我们看得更深一点,我们可以看到微小的差异来自哪里.

In [6]: def compound():

...: if foo and not bar and baz:

...: lambda: None

In [7]: def multiple():

....: if foo:

....: if not bar:

....: if baz:

....: lambda: None

In [8]: import dis

In [9]: dis.dis(compound)

2 0 LOAD_GLOBAL 0 (foo)

3 POP_JUMP_IF_FALSE 29

6 LOAD_GLOBAL 1 (bar)

9 UNARY_NOT

10 POP_JUMP_IF_FALSE 29

13 LOAD_GLOBAL 2 (baz)

16 POP_JUMP_IF_FALSE 29

3 19 LOAD_CONST 1 ( at 0x101d953b0, file "", line 3>)

22 MAKE_FUNCTION 0

25 POP_TOP

26 JUMP_FORWARD 0 (to 29)

>> 29 LOAD_CONST 0 (None)

32 RETURN_VALUE

这有13条指令

In [15]: dis.dis(g)

2 0 LOAD_GLOBAL 0 (foo)

3 POP_JUMP_IF_FALSE 34

3 6 LOAD_GLOBAL 1 (bar)

9 POP_JUMP_IF_TRUE 34

4 12 LOAD_GLOBAL 2 (baz)

15 POP_JUMP_IF_FALSE 31

5 18 LOAD_CONST 1 ( at 0x101dbb530, file "", line 5>)

21 MAKE_FUNCTION 0

24 POP_TOP

25 JUMP_ABSOLUTE 31

28 JUMP_ABSOLUTE 34

>> 31 JUMP_FORWARD 0 (to 34)

>> 34 LOAD_CONST 0 (None)

37 RETURN_VALUE

这有14条指令.

我在我的系统上使用默认的IPython做了这个,目前是2.7.5,但你可以使用这种技术来配置任何你想要的任何你想要运行的Python版本.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值