在本書中,我們提到了 Python 2 與 Python 3 的幾處差異。本書使用的是 Python 2,但我們也希望你能讀懂 Python 3 的代碼,並具備讓代碼兼容 Python 3 的能力。本附錄只討論與本書內容有關的 Python 特性的差異。(比如,Python 3 處理 Unicode 字符串的方式是不同的,但因為我們在本書中沒有涉及 Unicode,所以不討論這部分差異。)
在這個前提下,Python 3 與 Python 2 存在以下一些差異。
print
在 Python 3 中,print
是一個函數,這意味著你不能這樣寫:
print "Hello, World!"
而需要這樣寫:
print("Hello, World!")
還有一些與此相關的差異。你不能像在 Python 2 中那樣,在結尾處使用一個逗號,使下一個 print
語句輸出的內容與本次輸出的內容顯示在同一行:
print "Hello",print "World!"
在 Python 3 中,你需要這樣做:
print("Hello", end=")print("World!")
你也可以給 end
參數傳不同的值,但是用到的情況非常少。如果你有興趣的話,可以查一下 Python 3 的文檔。
你可能已經注意到了,print
在 Python 3 和 Python 2 代碼中的高亮顏色是不一樣的。這是因為在 Python 2 中,print
是一個關鍵字,而在 Python 3 中,print
是一個函數。
input
Python 2 中的 raw_input
在 Python 3 中改名為 input
了。這個函數會返回字符串,但不會嘗試對輸入的字符串做任何計算(比如將它轉成 int
或 float
)。
Python 2 中的 input
函數會對輸入進行計算(如果可能的話會將它轉換成數字),這個函數在 Python 3 中不存在了。
這意味著在 Python 2 中的代碼
your_name = raw_input("Enter your name:")
在 Python 3 中要這樣寫:
your_name = input("Enter your name:")
在 Python 2 中的代碼
age = input("Enter your age:")
在 Python 3 中要這樣寫:
age = int(input("Enter your age:")
整除
Python 3 中第三點主要的變化是處理整除的方式。是否還記得我們在第 3 章討論過這個話題?在 Python 2 中,代碼運行結果是這樣的:
>>> print 5/22
Python 2 在進行除法運算時會默認向下取整。Python 3 會默認進行浮點數除法,所以在 Python 3 中是這樣的:
>>> print(5/2)2.5
如果你想在 Python 3 中進行整除運算,可以使用雙斜線,像這樣:
>>> print(5//2)2
取余操作符(%
)用於計算整數相除的餘數,其在 Python 3 中的工作方式和在 Python 2 中一樣。
Python 2:>>> print 5%21Python 3:>>> print(5%2)1
range
在 Python 2 中,range
函數返回一個列表。但在 Python 3 中,range
返回一個 range
對象。如果是循環訪問的話,Python 3 中 range
對象的工作方式和 Python 2 中的列表基本一樣。但如果你想打印它,是不能看到 range
對像中的各個單獨的值的。
Python 2:>>> print range(5)[0, 1, 2, 3, 4]Python 3:>>> print(range(5))range(0, 5)
Python 2 到 Python 3 的轉換
有一個名為 2to3 的工具會嘗試自動將 Python 2 代碼轉換為 Python 3 代碼。如果你在使用 Python 3,可以拿本書中的代碼清單試一下。很多代碼在轉換後都能正常工作。但我們沒有測試本書中的代碼經 2to3 轉換後能否正常工作,所以我們不保證它適用於本書所有的代碼清單。
儘管 Python 3 是 Python 的最新版本,但 Python 2 現在還是被廣泛支持。因為非常非常多的人編寫的 Python 2 代碼不能在 Python 3 中正常工作,所以很多公司和個人都繼續使用 Python 2。有很多模塊還沒有升級,無法支持 Python 3,甚至有一些模塊從來沒有升級過。Python 2 的資源要遠比 Python 3 的多,這也是我們決定在本書中繼續使用 Python 2 的一個原因。但如果你想嘗試在自己的編程項目中使用 Python 3,我們祝你好運。