2
A
回答
4
Integer div ision比math.floor
函數調用更快:
>>> import timeit
>>> timeit.timeit('7//2')
0.024671780910702337
>>> timeit.timeit('floor(7/2)', setup='from math import floor')
0.27053647879827736
>>> timeit.timeit('math.floor(7/2)', setup='import math')
0.3131167508719699
正如你可以用這個拆卸看到,使用math
模塊的floor
函數(import math
和math.floor
或from math import floor
和floor
)涉及額外的查找和函數調用在平原整數除法:
>>> import dis
>>> import math
>>> from math import floor
>>> def integer_division():
... 7//2
...
>>> def math_floor():
... floor(7/2)
...
>>> def math_full_floor():
... math.floor(7/2)
...
>>> dis.dis(integer_division)
2 0 LOAD_CONST 3 (3)
3 POP_TOP
4 LOAD_CONST 0 (None)
7 RETURN_VALUE
>>> dis.dis(math_floor)
2 0 LOAD_GLOBAL 0 (floor)
3 LOAD_CONST 3 (3.5)
6 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>> dis.dis(math_full_floor)
2 0 LOAD_GLOBAL 0 (math)
3 LOAD_ATTR 1 (floor)
6 LOAD_CONST 3 (3.5)
9 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
12 POP_TOP
13 LOAD_CONST 0 (None)
16 RETURN_VALUE
0
當然,還有在函數調用一些開銷,如果你這樣做足夠的時間,你看到的速度差:
Run time for //: 12.940021991729736 sec
Run time for floor: 26.933987855911255 sec
下面的代碼我跑了:
from time import time
from math import floor
start_time = time()
for i in range(1, 10000):
for j in range(1, 10000):
result = i // j
print('Run time for //:', time() - start_time, 'sec')
start_time = time()
for i in range(1, 10000):
for j in range(1, 10000):
result = floor(i/j)
print('Run time for floor:', time() - start_time, 'sec')
相關問題
- 1. Python/vs //運算符
- 2. Python中的符號vs運算符
- 3. Python運算符返回整數
- 4. =>運算符vs =運算符
- 5. Python 2 vs 3:Lambda運算符
- 6. math.floor應該返回整數
- 7. Lexing求和運算符和帶符號整數的Python Python
- 8. Ruby =〜vs ===運算符
- 9. Math.floor在數學計算
- 10. ARM整數除法算法
- 11. 除法運算數
- 12. (!!)運算符溢出整數
- 13. 整數移位運算符
- 14. 減法運算符python
- 15. 與浮點運算一致的整數除法
- 16. Math.Floor vs在C#中投射爲整數類型
- 17. 布爾運算VS位運算符
- 18. 的Python%運算VS級聯
- 19. Python://運算符
- 20. Python:++運算符
- 21. Python:&=運算符
- 22. 運算符python參數
- 23. 將浮點數轉換爲除math.floor()之外的整數
- 24. Numpy vs mldivide,「\」matlab運算符
- 25. XMMatrixMultiply vs使用*運算符
- 26. - vs - =運算符與numpy
- 27. 運算符重載VS模板函數
- 28. 整數除法在Python
- 29. Python Math.floor不能以大整數生成正確的值
- 30. python 2.7 //運算符