讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 附錄 B Python 2 與 Python 3 的差異 >

附錄 B Python 2 與 Python 3 的差異

在本書中,我們提到了 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 了。這個函數會返回字符串,但不會嘗試對輸入的字符串做任何計算(比如將它轉成 intfloat)。

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,我們祝你好運。