溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

腳本如何同時(shí)兼容Python2和Python3

發(fā)布時(shí)間:2020-07-28 17:03:27 來(lái)源:億速云 閱讀:312 作者:Leah 欄目:編程語(yǔ)言

腳本如何同時(shí)兼容Python2和Python3?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

Future模塊導(dǎo)?

這也是最重要的?法,就是導(dǎo)?__future__模塊。它可以幫你在Python2中導(dǎo)?Python3的功能。這有?組例?。上下?管理器是Python2.6+引?的新特性,如果你想在Python2.5中使?它可以這樣做:

from __future__ import with_statement

Python3print已經(jīng)變?yōu)?個(gè)函數(shù)。如果你想在Python2中使?它可以通過(guò)__future__導(dǎo)?:

print

# Output:

from __future__ import print_function

print(print)

# Output: <built-in function print>

模塊重命名

?先,?多時(shí)候我們會(huì)這樣在腳本中導(dǎo)?模塊:

import foo

# or

from foo import bar

其實(shí)你也可以這樣做:

import foo as foo

這樣做可以起到和上?代碼同樣的功能,但最重要的是它能讓你的腳本同時(shí)兼容Python2Python3?,F(xiàn)在我們來(lái)看下?的代碼:

try:

      import urllib.request as urllib_request # for Python 3

except ImportError:

      import urllib2 as urllib_request # for Python 2

稍微解釋?下上?的代碼。我們將模塊導(dǎo)?代碼包裝在try/except語(yǔ)句中。我們是這樣做是因?yàn)樵?span>Python 2中并沒(méi)有urllib.request模塊。這將引起?個(gè)ImportError異常。?在Python2urllib.request的功能則是由urllib2提供的。所以,當(dāng)我們?cè)噲D在Python2中導(dǎo)?urllib.request模塊的時(shí)候,?旦我們捕獲到ImportError我們將通過(guò)導(dǎo)?urllib2模塊來(lái)代替它。

最后,你要了解as關(guān)鍵字的作?。它將導(dǎo)?的模塊映射到urllib.request,所以我們通過(guò)urllib_request這個(gè)別名就可以使?urllib2中的所有類和?法了。

過(guò)期的Python2內(nèi)置功能

另?個(gè)需要了解的事情就是Python2中有12個(gè)內(nèi)置功能在Python3中已經(jīng)被移除了。要確保Python2代碼中不要出現(xiàn)這些功能來(lái)保證對(duì)Python3的兼容。這有?個(gè)強(qiáng)制讓你放棄12內(nèi)置功能的?法:

from future.builtins.disabled import *

現(xiàn)在,只要你嘗試在Python3中使?這些被遺棄的模塊時(shí),就會(huì)拋出?個(gè)NameError異常,如下:

from future.builtins.disabled import *

apply()

# Output: NameError: obsolete Python 2 builtin apply is disabled

標(biāo)準(zhǔn)庫(kù)向下兼容的外部?持

有?些包在?官?的?持下為Python2提供了Python3的功能。例如我們有:

enum pip install enum34

singledispatch pip install singledispatch

pathlib pip install pathlib

關(guān)于腳本如何同時(shí)兼容Python2和Python3問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI