溫馨提示×

溫馨提示×

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

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

python2與3有哪些區別

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

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

python2和python3的區別

  • 區別

  • 一、python3.0的一些變化


    • 1.print函數

    • 2.Unicode

    • 3.除法運算

    • 4.異常

    • 5.xrange

    • 6.八進制字面量表示

    • 7.不等運算符

    • 8.去掉了repr表達式"

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

    • 10.數據類型

  • 總結


區別

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


一、python3.0的一些變化

1.print函數

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

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

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

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

2.Unicode

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

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

3.除法運算

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

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

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

4.異常

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

5.xrange

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

6.八進制字面量表示

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

7.不等運算符

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

8.去掉了repr表達式"

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

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

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

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

10.數據類型

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

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

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

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女