溫馨提示×

溫馨提示×

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

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

python2與3有哪些區(qū)別

發(fā)布時間:2021-01-11 13:59:20 來源:億速云 閱讀:200 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(guān)python2與3有哪些區(qū)別的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

python2和python3的區(qū)別

  • 區(qū)別

  • 一、python3.0的一些變化


    • 1.print函數(shù)

    • 2.Unicode

    • 3.除法運(yùn)算

    • 4.異常

    • 5.xrange

    • 6.八進(jìn)制字面量表示

    • 7.不等運(yùn)算符

    • 8.去掉了repr表達(dá)式"

    • 9.多個模塊被改名(根據(jù)PEP8)

    • 10.數(shù)據(jù)類型

  • 總結(jié)


區(qū)別

??python的3.0版本,常被稱為python3000,簡稱py3k。相對于python的早期版本,這是一個較大的升級為了不帶入過多累贅,python3.0在設(shè)計的時候沒有考慮向下相容。
??許多針對早期python版本設(shè)計的程序都無法在python3.0上正常執(zhí)行。為了照顧現(xiàn)有程序,python2.6作為一個過渡版本,基本使用了python2.x的語法和庫,同時考慮了向python3.0的遷移,允許使用部分python3.0的語法與函數(shù)。
??新的python程序建議使用python3.0版本的語法。除非執(zhí)行環(huán)境無法安裝python3.0或者程序本身使用了不支持python3.0的第三方庫。目前不支持python的第三方庫有Twisted,py2exe,PIL等。
大多數(shù)第三方庫都正在努力的兼容python3.0版本。即使無法立即使用python3.0,也建議編寫相容的3.0版本python程序,然后使用2.6,2.7來執(zhí)行。


一、python3.0的一些變化

1.print函數(shù)

??print語句沒有了,取而代之的是print()函數(shù)。python2.6與python2.7部分的支持這種形式的print語法。在python2.6與2.7里面以下三種形式是等價的

print "我是菜鳥"print (我是菜鳥) #注意print后邊有個空格print("我是菜鳥") #print()不能帶有其他任何參數(shù)

??然而python2.6實(shí)際上已經(jīng)支持新的print()語法

from _future_import print_functionprint("我是個菜鳥","我好菜啊",sep=', ')

2.Unicode

??python2有ASCII str()類型,unicode()是單獨(dú)的,不是byte類型?,F(xiàn)在python3有了Unicode(utf-8)字符串,以及一個字節(jié)類:byte和bytearrays。由于python3.x源碼文件默認(rèn)使用utf-8編碼,這就使得以下代碼合法

我沒女友='I have no girlfriends'print(我沒女友)

3.除法運(yùn)算

??python中的除法相較于其他語言會高端一些有些很復(fù)雜的規(guī)則,python中的除法有/與//兩個運(yùn)算符。
首先說除法,python2.x和大多數(shù)語言一樣,比如java和c,整數(shù)相除結(jié)果是一個整數(shù),把小數(shù)部分完全忽略掉,浮點(diǎn)數(shù)的除法會保留小數(shù)點(diǎn)的部分得到的一個浮點(diǎn)數(shù)結(jié)果。
??python3.x中除法就不再這樣做了,對于整數(shù)間的相除結(jié)果也會是浮點(diǎn)數(shù)。(這里可以用0/1來理解)
??而對于//除法,這種除法叫floor除法,會對除法的結(jié)果自動進(jìn)行一個floor操作,在python2.x和3.x中是一致的。

#python2.x與3.x-1//2 #輸出值是-1

??注意的是并不是舍棄小數(shù)部分,而是執(zhí)行floor操作,如果要截取小數(shù)部分,那么就需要使用math模塊的trunc函數(shù)。

4.異常

??在python3中處理異常也輕微改變了,在python3中,我們使用as作為關(guān)鍵詞。捕獲異常的語法由 except exc,var改為 except exc as var。
??使用語法except(exc1,exc2) as var可以同時捕獲多種類別的異常。python2.6已經(jīng)支持這兩種語法。
·在2.x時代,所有類型的對象都是可以被直接拋出的,在3.x時代只有繼承BaseException的對象才可被拋出。
·2.x raise語句使用逗號將拋出對象類型和參數(shù)分開,3.x取消了這種奇葩寫法,直接調(diào)用構(gòu)造函數(shù)拋出對象即可。
??在2.x時代,異常在代碼中除了表示程序錯誤,還經(jīng)常做一些普通控制結(jié)構(gòu)應(yīng)該做的事,在3.x中可以看出,設(shè)計者讓異常變得更加專一,只有在錯誤發(fā)生的情況下才能用去用異常捕獲語句來處理。

5.xrange

??在python2中xrange()創(chuàng)建迭代對象的用法是非常流行的。比如:for循環(huán)或者是列表/集合/字典推導(dǎo)式。
??這個表現(xiàn)十分像生成器(比如:“惰性求值”)。但是這個xrange-iterable是無窮的,意味著你可以無限遍歷。
??由于它的惰性求值,如果你要遍歷它多次,xrange()函數(shù)比range()函數(shù)更快(比如for循環(huán))。盡管如此,對比迭代一次,不建議你迭代多次,因此生成器每次都從頭開始。
??在python3中,range()是像xrange()那樣實(shí)現(xiàn),以至于一個專門的xrange()函數(shù)都不再存在(在python3中xrange()會拋出命名異常。

6.八進(jìn)制字面量表示

??八進(jìn)制必須寫成0o777,原來的形式0777不能用了;二進(jìn)制0b111。新增了一個bin()函數(shù)用于將一個整數(shù)轉(zhuǎn)換成二進(jìn)制字串。python2.6已經(jīng)支持這兩種語法

7.不等運(yùn)算符

python2.x中不等于 !=和<>
python3.x中不等于只有!=

8.去掉了repr表達(dá)式"

python2.x中反引號"相當(dāng)于repr函數(shù)的作用
python3.x中去掉了"這種寫法,只允許repr函數(shù),感覺repr只有debug的時候才用,多數(shù)時候還是用str函數(shù)來用字符串描述對象。

9.多個模塊被改名(根據(jù)PEP8)

舊名字新名字
_winregwinreg
ConfigParserconfigparser
copy_regcopyreg
Queuequeue
SocketServersocketserver
reprreprlib

??StringIO模塊現(xiàn)在被合并到新的io模組內(nèi)new,md5,gopherlib等模塊被刪除 。python2.6已經(jīng)支援新的io模組。
??httplibBase,HTTPServer,CGIHTTPServer,SimpleHTTPServer,Cookie,cookerlib被合并到http包內(nèi)。取消了exec語句只剩下exec()函數(shù)。python2.6已經(jīng)支援exec()函數(shù)。

10.數(shù)據(jù)類型

??python3.x去除了long類型,現(xiàn)在只有一種整型——int
??新增了bytes類型,對應(yīng)于2.x版本的八位串,定義一個butes字面量方法如下

b=b'lalala'type(b)#輸出<type 'bytes'>

str對象和bytes對象可以使用encode()(str->bytes)or.decode()(bytes->str)方法互相轉(zhuǎn)換。

s=b.decode()b1=s.encode()

dict的.keys()、.items和.values()方法返回迭代器,而之前的iterkeys()等函數(shù)都被遺棄。同事去掉的還有dict.has_key(),用in替代它吧>_<。

感謝各位的閱讀!關(guān)于“python2與3有哪些區(qū)別”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

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

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

AI