首頁  >  文章  >  後端開發  >  Python2.x與3??.x版本區別

Python2.x與3??.x版本區別

高洛峰
高洛峰原創
2016-11-23 13:50:24991瀏覽

Python的3.0版本,常稱為Python 3000,或簡稱Py3k。相對於Python的早期版本,這是一個較大的升級。

為了不帶入過多的累贅,Python 3.0在設計的時候沒有考慮向下相容。

許多針對早期Python版本設計的程式都無法在Python 3.0上正常執行。

為了照顧現有程序,Python 2.6作為一個過渡版本,基本上使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移,允許使用部分Python 3.0的語法與函數。

 

新的Python程式建議使用Python 3.0版本的語法。

 

除非執行環境無法安裝Python 3.0或程式本身使用了不支援Python 3.0的第三方函式庫。目前不支援Python 3.0的第三方函式庫有Twisted, py2exe, PIL等。

大多數第三方函式庫都正在努力相容Python 3.0版本。即使無法立即使用Python 3.0,也建議編寫相容於Python 3.0版本的程序,然後使用Python 2.6, Python 2.7來執行。

主要變化

Python 3.0的變化主要在以下幾個方面:

print語句沒有了,取而代之的是print()函數。 Python 2.6與Python 2.7部分地支援這種形式的print語法。在Python 2.6與Python 2.7裡面,以下三種形式是等價的:

print "fish"

print ("fish") #注意print後面有個fish

print ("fish") #注意print後面有個fish

#print()不能帶有任何其它參數

   

然而,Python 2.6實際上已經支援新的print()語法:

", sep=', ')

   

新的str類別表示一個Unicode字符串,相當於Python 2.x版本的unicode類別。而位元組序列則以類似b"abc"的語法表示,以bytes類別表示,相當於Python 2.x的str類別。

現在兩個類別不能再隱式地自動轉換,因此在Python 3.x裡面"fish"+b"panda"是錯誤。正確的寫法是"fish"+b"panda".decode("utf-8")。 Python 2.6可以自動地將位元組序列辨識為Unicode字串,方法是:

from __future__ import unicode_literals

print(repre")))))))

/"在Python 3.x內總是會傳回浮點數。而在Python 2.6內會判斷被除數與除數是否為整數。如果整數會回傳整數值,相當於整除;浮點數則傳回浮點數值。

為了讓Python 2.6統一回傳浮點數值,可以:

from __future__ import di

result={}

for k , v in d.items():

    result[expr1]=expr2

return result

  式

這個文法等價於:

result = set()

for x in stuff:

   

def sendMail(from_: str , to: str, title: str, body: str) -> bool:

    pass

    winreg    

ConfigParser    configparser    

copy_reg    copyreg

Queue    queue    

SocketServer    socketserver    

repr    reprlib    

repr    reprlib    

repr    reprlib    

repr   7070制必須寫成0b111。新增了一個bin()函數用於將一個整數轉換成二進位字符串。 Python 2.6已經支援這兩種語法。

dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()不再傳回列表,而是迭代器。

如 果兩個物件之間沒有定義明確的有意義的順序。使用, =比較它們會投擲異常。例如1

可以註解函數的參數與回傳值。此特性可方便IDE對原始碼進行更深入的分析。例如為參數增加類別訊息:

捕獲異常的語法由except exc, var改為except exc as var。使用語法except (exc1, exc2) as var可以同時捕捉多種類別的異常。 Python 2.6已經支援這兩種語法。

集合(set) 的新寫法:{1,2,3,4}。注意{}仍然表示空的字典(dict) 。

字典推導式(Dictionary comprehensions) {expr1: expr2 for k, v in d},這個語法等價於

 

合併int與long型。

多個模組被改名(根據PEP8):

StringIO模組現在被合併到新的io模組內。 new, md5, gopherlib等模組被刪除。 Python 2.6已經支援新的io模組。

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合併到http包內。

取消了exec語句,只剩下exec()函數。 Python 2.6已經支援exec()函數。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn