python优化else_Python if else微优化

通过timeit模块对比了Python中if-else语句与三元运算符在不同条件下的执行效率。在x为false时,if-else形式节省1.4纳秒,但在x为true时多花费40.2纳秒。只有在x的false可能性大约是true的30倍时,使用if-else才有意义。此外,文章强调在微优化时要考虑测量的误差和实际性能影响。
摘要由CSDN通过智能技术生成

不要思考,也不要怀疑,在shell命令行使用timeit来度量(到目前为止,这是最好、最简单的使用方法!)。MacOSX 10.5上的Python2.5.4在笔记本电脑上…:$ python -mtimeit -s'x=0' 'if x: d=1' 'else: d=2'

10000000 loops, best of 3: 0.0748 usec per loop

$ python -mtimeit -s'x=1' 'if x: d=1' 'else: d=2'

10000000 loops, best of 3: 0.0685 usec per loop

$ python -mtimeit -s'x=0' 'd=2' 'if x: d=1'

10000000 loops, best of 3: 0.0734 usec per loop

$ python -mtimeit -s'x=1' 'd=2' 'if x: d=1'

10000000 loops, best of 3: 0.101 usec per loop

因此,您可以看到:与“if/else”形式相比,“just if”表单在x为false时可以节省1.4纳秒,但是在x为true时要花费40.2纳秒;因此,在微优化上下文中,只有当x的false可能性是true的30倍左右时,才应该使用前者。同时:

^{pr2}$

…if/else的三元运算符有自己的极小的加号和减号。在

当差异如此之小时,你应该反复测量,确定噪音水平,并确保你没有把“噪音”的差异视为显著。例如,要比较“x is true”情况下的语句与表达式if/else,请分别重复几次:$ python -mtimeit -s'x=1' 'd=1 if x else 2'

10000000 loops, best of 3: 0.076 usec per loop

$ python -mtimeit -s'x=1' 'd=1 if x else 2'

10000000 loops, best of 3: 0.0749 usec per loop

$ python -mtimeit -s'x=1' 'd=1 if x else 2'

10000000 loops, best of 3: 0.0742 usec per loop

$ python -mtimeit -s'x=1' 'd=1 if x else 2'

10000000 loops, best of 3: 0.0749 usec per loop

$ python -mtimeit -s'x=1' 'd=1 if x else 2'

10000000 loops, best of 3: 0.0745 usec per loop

现在您可以声明表达式的形式(在这台机器和关键软件的版本上)为74.2到76.0纳秒——这个范围比任何单个数字都要表达得多。同样:$ python -mtimeit -s'x=1' 'if x: d=1' 'else: d=2'

10000000 loops, best of 3: 0.0688 usec per loop

$ python -mtimeit -s'x=1' 'if x: d=1' 'else: d=2'

10000000 loops, best of 3: 0.0681 usec per loop

$ python -mtimeit -s'x=1' 'if x: d=1' 'else: d=2'

10000000 loops, best of 3: 0.0687 usec per loop

$ python -mtimeit -s'x=1' 'if x: d=1' 'else: d=2'

10000000 loops, best of 3: 0.0679 usec per loop

$ python -mtimeit -s'x=1' 'if x: d=1' 'else: d=2'

10000000 loops, best of 3: 0.0692 usec per loop

现在您可以自信地声明语句形式(在相同条件下)需要67.9到69.2纳秒;因此,对于x true,与表达式形式相比,它的优势是4.8到8.1纳秒(将后一个间隔估计限制在6.3到6.8纳秒是相当公平的,比较最小值/最小值和最大值/最大值,而不是最小值/最大值和最大值/最小值,因为这是更广泛、更谨慎的估计值)。在

一旦你意识到这些微小的差异是微小的,那么你需要花多少时间和精力去处理这些细微的差异,这当然是一个不同的问题。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值