首页 > 解决方案 > Python:除法与移位

问题描述

在python中,有

division (//, /) and shift (>>, <<).

  1. 在性能方面,移位运算符更有利?!

  2. 使用移位而不是除法运算符有什么好处吗?!

标签: python

解决方案


使用以下代码测量后,偏移似乎有点慢,但并不显着,它在我的电脑上,你的结果可能会有所不同。

我得到以下答案:

It took 42.1938125s for division by 2
It took 43.217766499999996s for integer division by 2
It took 47.926054599999986s for shift by 1
It took 41.82601500000001s for division by 4
It took 43.20513730000002s for integer division by 4
It took 48.33005560000004s for shift by 2
import timeit
import random

random.seed(42)
DATA = [random.randint(0,10000) for _ in range(400)]

def measure(func, name):
    time = timeit.timeit(lambda: [func(val) for val in DATA], number=1000000)
    print(f"It took {time}s for {name}")

measure(lambda x:x / 2, "division by 2")
measure(lambda x:x // 2, "integer division by 2")
measure(lambda x:x >> 1, "shift by 1")
measure(lambda x:x / 4, "division by 4")
measure(lambda x:x // 4, "integer division by 4")
measure(lambda x:x >> 2, "shift by 2")

推荐阅读