色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python x。** y與math.pow(x,y)的指數(shù)

瀏覽:36日期:2022-08-07 10:09:05
如何解決python x。** y與math.pow(x,y)的指數(shù)?

使用Power運(yùn)算符**將更快,因?yàn)樗粫?huì)產(chǎn)生函數(shù)調(diào)用的開(kāi)銷。如果您反匯編Python代碼,則可以看到以下內(nèi)容:

>>> dis.dis(’7. ** i’) 1 0 LOAD_CONST 0 (7.0) 3 LOAD_NAME0 (i) 6 BINARY_POWER 7 RETURN_VALUE >>> dis.dis(’pow(7., i)’) 1 0 LOAD_NAME0 (pow) 3 LOAD_CONST 0 (7.0) 6 LOAD_NAME1 (i) 9 CALL_FUNCTION 2 (2 positional, 0 keyword pair) 12 RETURN_VALUE >>> dis.dis(’math.pow(7, i)’) 1 0 LOAD_NAME0 (math) 3 LOAD_ATTR1 (pow) 6 LOAD_CONST 0 (7) 9 LOAD_NAME2 (i) 12 CALL_FUNCTION 2 (2 positional, 0 keyword pair) 15 RETURN_VALUE

請(qǐng)注意,我在這里使用變量i作為指數(shù),因?yàn)轭愃瞥?shù)的表達(dá)式7. ** 5實(shí)際上是在編譯時(shí)求值的。

現(xiàn)在,實(shí)際上,這種差異并不重要,正如您在計(jì)時(shí)時(shí)可以看到的那樣:

>>> from timeit import timeit>>> timeit(’7. ** i’, setup=’i = 5’)0.2894785532627111>>> timeit(’pow(7., i)’, setup=’i = 5’)0.41218495570683444>>> timeit(’math.pow(7, i)’, setup=’import math; i = 5’)0.5655053168791255

所以,雖然pow和math.pow大約慢一倍,但仍不夠快,不會(huì)太在乎。除非您實(shí)際上可以將求冪識(shí)別為瓶頸,否則如果清晰度降低,就沒(méi)有理由選擇一種方法而不是另一種方法。這尤其適用,因?yàn)閜ow例如提供了集成的模運(yùn)算。

Alfe在上述評(píng)論中提出了一個(gè)很好的問(wèn)題:

timeit表明這math.pow比**所有情況都要慢。math.pow()無(wú)論如何有什么好處?有誰(shuí)知道它有什么好處呢?

math.pow內(nèi)置函數(shù)pow和冪運(yùn)算符的最大區(qū)別**在于,它 始終使用浮點(diǎn)語(yǔ)義。因此,如果由于某種原因而要確保返回的結(jié)果是浮點(diǎn)數(shù),math.pow則將確保此屬性。

我們來(lái)看一個(gè)示例:我們有兩個(gè)數(shù)字i和j,不知道它們是浮點(diǎn)數(shù)還是整數(shù)。但我們希望得到的浮點(diǎn)結(jié)果i^j。那么我們有什么選擇呢?

我們可以將至少一個(gè)參數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù),然后執(zhí)行i ** j。我們可以i ** j將結(jié)果轉(zhuǎn)換為浮點(diǎn)數(shù)(當(dāng)浮點(diǎn)數(shù)為i或時(shí),會(huì)自動(dòng)使用浮點(diǎn)指數(shù)j,因此結(jié)果相同)。我們可以使用math.pow。

因此,讓我們測(cè)試一下:

>>> timeit(’float(i) ** j’, setup=’i, j = 7, 5’)0.7610865891750791>>> timeit(’i ** float(j)’, setup=’i, j = 7, 5’)0.7930400942188385>>> timeit(’float(i ** j)’, setup=’i, j = 7, 5’)0.8946636625872202>>> timeit(’math.pow(i, j)’, setup=’import math; i, j = 7, 5’)0.5699394063529439

如您所見(jiàn),math.pow實(shí)際上更快!如果考慮一下,函數(shù)調(diào)用的開(kāi)銷現(xiàn)在也消失了,因?yàn)樵谒衅渌娲桨钢校覀兌急仨氄{(diào)用float()。

此外,可能值得指出的是**,pow可以通過(guò)實(shí)現(xiàn)自定義類型的特殊__pow__(和__rpow__)方法來(lái)覆蓋和的行為。因此,如果您出于某種原因(無(wú)論出于何種原因)不希望使用它,math.pow則不會(huì)這樣做。

解決方法

使用math.pow或**運(yùn)算符哪個(gè)更有效?我什么時(shí)候應(yīng)該使用另一個(gè)?

到目前為止,我知道x**y可以返回一個(gè)int或一個(gè),float如果您使用小數(shù),該函數(shù)pow將返回一個(gè)浮點(diǎn)數(shù)

import mathprint math.pow(10,2)print 10. ** 2

標(biāo)簽: Python 編程
主站蜘蛛池模板: 亚洲精品视频在线观看视频 | 手机在线观看精品国产片 | xxx欧美老熟| 欧美性性性性性色大片免费的 | 亚洲午夜在线 | 成人亚洲精品一区二区 | 日本韩国一级毛片中文字幕 | 在线a亚洲视频播放在线观看 | 国产1区在线观看 | 日本成人免费在线视频 | 99视频在线永久免费观看 | 91亚洲精品国产第一区 | 午夜日韩精品 | 免费人成网站在线播放 | 日韩免费一级毛片欧美一级日韩片 | 久久国产精品最新一区 | 末满18以下勿进色禁网站 | 欧美成人看片一区二区三区尤物 | 最新亚洲国产有精品 | 国产成人亚洲精品老王 | 亚洲视频中文字幕在线 | 日本一区二区三区国产 | 在线免费观看精品 | 伊大人香蕉久久网欧美 | 国产区高清 | 久久99久久99精品免观看 | 成人午夜亚洲影视在线观看 | 毛片看| 9久久99久久久精品齐齐综合色圆 | 久久国产欧美日韩高清专区 | 狠狠色丁香九九婷婷综合五月 | 日本不卡不码高清免费观看 | 久久精品一区二区三区中文字幕 | 欧美一级性视频 | 亚洲成年人在线观看 | 欧美线在线精品观看视频 | 一区二区三区影视 | 久久精品中文字幕免费 | 欧美大片aaaa一级毛片 | 国产视频久 | 国产午夜精品免费一二区 |