Python if else微优化
在思考代码的优化时,我想知道哪些在
python中更贵:
if x: d = 1 else: d = 2 要么 d = 2 if x: d = 1 有什么想法吗?我喜欢第二次减少的行数,但想知道重新分配是否比条件切换更昂贵. 解决方法
不要思考,不要怀疑,测量 – 使用shell命令行的timeit(到目前为止最好,最简单的方式使用它!).在笔记本电脑上的Mac OSX 10.5上的Python 2.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 所以你看:当x为假时,“just-if”形式可以节省1.4纳秒,但是当x为真时,与“if / else”形式相比,成本为40.2纳秒;因此,在微优化环境中,只有当x的误差可能比真实或其他地方低30倍时,才应使用前者.也: $python -mtimeit -s'x=0' 'd=1 if x else 2' 10000000 loops,best of 3: 0.0736 usec per loop $python -mtimeit -s'x=1' 'd=1 if x else 2' 10000000 loops,best of 3: 0.076 usec per loop … if / else的三元运算符有其自己的微小优缺点. 当差异如此微小时,你应该重复测量,确定噪声水平是什么,并确保你没有把“噪音”中的差异视为重要.例如,要在“x为真”的情况下比较语句与表达式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.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纳秒是相当公平的,比较最小/最小和最大/最大而不是最小/最大和最大/最小,更谨慎的估计确实). 一旦你意识到任何特定的护理它们是微观的,那么多少时间和精力值得投入这种微观差异,当然,这是一个不同的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |