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]=expr2return 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()函數。