最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python學習字符串駐留與常量折疊隱藏特性詳解

 更新時間:2021年09月30日 16:21:28   作者:燕山588  
這篇文章主要為大家介紹了python學習中字符串駐留與常量折疊的一些隱藏特性,并給大家進行了詳細分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助

下面是Python字符串的一些微妙的特性,絕對會讓你大吃一驚。

案例一:

案例二:

案例三:

很好理解, 對吧?

說明:

這些行為是由于 Cpython 在編譯優(yōu)化時, 某些情況下會嘗試使用已經存在的不可變對象而不是每次都創(chuàng)建一個新對象. (這種行為被稱作字符串的駐留[string interning])

發(fā)生駐留之后, 許多變量可能指向內存中的相同字符串對象. (從而節(jié)省內存)

在上面的代碼中, 字符串是隱式駐留的. 何時發(fā)生隱式駐留則取決于具體的實現(xiàn). 這里有一些方法可以用來猜測字符串是否會被駐留

所有長度為 0 和長度為 1 的字符串都被駐留.

字符串在編譯時被實現(xiàn) (‘wtf' 將被駐留, 但是 ‘'.join([‘w', ‘t', ‘f']) 將不會被駐留)

字符串中只包含字母,數(shù)字或下劃線時將會駐留. 所以 ‘wtf!' 由于包含 ! 而未被駐留. 可以在【地址1】找到 CPython 對此規(guī)則的實現(xiàn).

當在同一行將 a 和 b 的值設置為 “wtf!” 的時候, Python 解釋器會創(chuàng)建一個新對象, 然后同時引用第二個變量(譯: 僅適用于3.7以下, 詳細情況請看【地址2】). 如果你在不同的行上進行賦值操作, 它就不會“知道”已經有一個 wtf!對象 (因為 “wtf!” 不是按照上面提到的方式被隱式駐留的). 它是一種編譯器優(yōu)化, 特別適用于交互式環(huán)境.\

常量折疊(constant folding) 是 Python 中的一種 窺孔優(yōu)化(peephole optimization) 技術. 這意味著在編譯時表達式 ‘a'*20會被替換為 ‘aaaaaaaaaaaaaaaaaaaa' 以減少運行時的時鐘周期. 只有長度小于 20 的字符串才會發(fā)生常量折疊. (為啥? 想象一下由于表達式 ‘a'*10**10 而生成的 .pyc 文件的大小). 相關的源碼實現(xiàn)在【地址3】.

如果你是使用 3.7 版本中運行上述示例代碼, 會發(fā)現(xiàn)部分代碼的運行結果與注釋說明相同. 這是因為在 3.7 版本中, 常量折疊已經從窺孔優(yōu)化器遷移至新的 AST 優(yōu)化器, 后者可以以更高的一致性來執(zhí)行優(yōu)化. (由 Eugene Toder 和 INADA Naoki 在 bpo-29469 和 bpo-11549 中貢獻.)

(譯: 但是在最新的 3.8 版本中, 結果又變回去了. 雖然 3.8 版本和 3.7 版本一樣, 都是使用 AST 優(yōu)化器. 目前不確定官方對 3.8 版本的 AST 做了什么調整.)

以上就是python學習字符串駐留與常量折疊隱藏特性詳解的詳細內容,更多關于python隱藏特的資料請關注腳本之家其它相關文章!

相關文章

最新評論

盘锦市| 彝良县| 沙河市| 安吉县| 任丘市| 宁乡县| 安吉县| 丰都县| 玉田县| 即墨市| 买车| 芦溪县| 石城县| 肃宁县| 七台河市| 资阳市| 侯马市| 大渡口区| 山西省| 高密市| 商洛市| 衡阳市| 诸城市| 余姚市| 深水埗区| 上虞市| 五常市| 永吉县| 河源市| 安塞县| 合江县| 二连浩特市| 斗六市| 金寨县| 靖州| 新建县| 门头沟区| 黄平县| 义乌市| 郸城县| 文化|