簡單問題: 爲什麼(7**3) ** 24 % 25
幾乎沒有時間運行,但7 ** 3 ** 24 % 25
沒有終止?Python冪運算和分組順序
回答
因此,7 ** 3 ** 24
被評估爲7 ** 282429536481
(硬),而(7**3) ** 24
只是343 ** 24
(簡單)。
作爲一個有趣的旁註:CPython的,其中有一個窺視孔優化器,能夠優化掉與常量合併的「容易」的情況。但「硬」的情況下只能摺疊3 ** 24
。
>>> def foo():
return 7 ** 3 ** 24 % 25
...
>>> def bar():
return (7**3) ** 24 % 25
...
>>> dis.dis(foo)
2 0 LOAD_CONST 1 (7)
3 LOAD_CONST 5 (282429536481)
6 BINARY_POWER
7 LOAD_CONST 4 (25)
10 BINARY_MODULO
11 RETURN_VALUE
>>> dis.dis(bar)
2 0 LOAD_CONST 7 (1L)
3 RETURN_VALUE
OOOOOOOOH是的!這與常規數學中的相同。對不起,我很蠢。 – 2015-04-02 03:47:22
是的,1.6910144928582986e + 238680647722是相當大的。 :-)當然,如果我們只關心mod 25,我們可以使用pow的三參數形式來快速得到結果。 – DSM 2015-04-02 03:47:54
當它用上標寫出時,順序是顯而易見的,但在這種表示法中,我沒有意識到發生了什麼。 – 2015-04-02 03:48:29
- 1. Python數學運算順序
- 2. Python中的時序模冪運算:語法與函數
- 3. C++運算順序:分工與另外
- 4. C++中的模冪運算
- 5. C++:實現模冪運算
- 6. Python分配順序
- 7. 順序分組值
- 8. 數學運算順序算法
- 9. 兩個列表性能的Python冪運算
- 10. 分組和按順序不工作
- 11. 如何拆分順序和組合verilog
- 12. Maple中的快速模冪運算
- 13. 分組順序depands在SQL
- 14. Python - 奇怪/意外的行爲 - 運算符的優先順序
- 15. 如何在C#中執行模乘和冪運算?
- 16. 如何提高日誌和冪運算的消耗
- 17. MySQL IN運算符結果集順序
- 18. RPGLE中的布爾運算順序
- 19. 邏輯運算符的執行順序
- 20. Java三元運算符 - 參數順序
- 21. 比較運算符的評估順序?
- 22. 運算出全局製表符順序?
- 23. 分組和排序算法的幫助
- 24. 按照字母順序使用linq分組計算電影
- 25. 分組順序按最新排序
- 26. jquery分類和順序=)
- 27. 聲明順序和分配
- 28. 參數和管道右側運算符的順序
- 29. Python,按特定順序運行命令
- 30. 按字典順序分組字符串(python)
運算符優先級.. – wim 2015-04-02 03:42:03
@wim具體是什麼?如果'%'優先於'**',那麼它將計算343到24的冪,這幾乎不需要時間。否則,它與快速表達相同。 – 2015-04-02 03:43:02