每門程式語言在釋出更新之後,主要版本之間都會發生很大的變化。 在本文中,Vinodh Kumar 通過示例解釋了 Python 2 和 Python 3 之間的一些重大差異,以幫助說明語言的變化。
本教程主要介紹內容:
- 表示式
- Print 選項
- Unequal 操作
- Range
- 自動遷移
- 效能問題
- 主要的內部事務更改
1、表示式
在 Python 2 中為獲得計算表示式,你會鍵入:
1 |
X = raw_input ("enter some values) |
但在 Python 3 中,你會鍵入:
1 |
X = input ("enter some values") |
因此,無論我們輸入什麼,值都會分配給 2 和 3 中的變數 x。當在 Python 2 中輸入 2*6 時,結果將是 12,這是評估值。
但是,當在 Python 3 中執行相同的程式時,結果是字串值。 在這種情況下,它看起來像字串格式的 2*6。
那麼,我們如何獲得評估表示式呢? 現在,我們必須使用一個名為 eval 的表示式或函式。 當您在輸入之前編寫 eval 時,它會將表示式轉換為計算值。
1 |
x= eval(input("enter some values")) = 12 |
具體表示式示例:
在 Python 2 中:
1 |
name = input("What is your name? ")print ("Hello, %s." %name) |
然後輸出:
在 Python 3 中:
1 |
name = input("What is your name? ")print ("Hello, %s." %name) |
然後輸出:
我們可以清楚地看到,他們之間的差異很小。
2、Print 選項
在 Python 2 中,print 是一個不需要括號的語句。 在 Python 3 中,print 是一個函式,值需要用括號括起來。
Python 2
輸入:
1 |
print "hello world" |
會輸出:
Python 3
輸入:
1 |
1 != 1.0print (False) |
會輸出:
3、Unequal 操作
當我們在 Python 2 中使用 Unequal 運算子時,我們需要使用大於 > 或小於 < 符號。 但是,在 Python 3 中,有一個通用運算子。 感嘆號 ! 和等號 = 用於表示值是否相等。
Python 2 -<> 運算子表示不相等
Python 3 -! 運算子表示不相等
Python 2
輸入:
1 |
1 <> 1.0print "False" |
會輸出:
Python 3
輸入:
1 |
1 != 1.0print (False)1 != 1.0print (False) |
會輸出:
4、Range
Range 用於生成數字列表,通常用於迭代 for 迴圈。
在這裡你可以看到 X 等於 Range 10。當我們檢查變數 X 時,它返回了列表型別。 這意味著在 Python 2 中,Range 是列表的型別。當我寫 X 之後,得到一個物件列表,這裡是:0 1 2 3 4 5 6 7 8 9。
現在讓我們轉到 Python 3,當我們寫 X 等於 Range 5,這個值就被賦給變數 X;當我們檢查變數 X 的型別時,它會返回一個 Range 物件本身。 這意味著在 Python 3 中,Range 是一個範圍物件本身。
Python 2
輸入:
1 |
print range(0,10,1) |
會輸出:
Python 3
輸入:
1 |
print(list(range(10))) |
會輸出:
5、自動遷移
那麼,我們如何自動執行指令碼以將程式碼從 Python 2 移動到 3?
在這裡,我們可以使用 Python 中的 Add 2 Numbers 進行測試。
Python 2
輸入:
1 |
n1 = 1n2 = 2add = float(n1) + float(n2)print 'sum of {0} and {1} is {2}'.format(n1, n2, add) |
會輸出:
現在使用 2to3 的遷移,我們可以轉換上面的程式碼。
輸入:
1 2 |
n1 = 1n2 = 2add = float(n1) + float(n2) print('sum of {0} and {1} is {2}'.format(n1, n2, add)) |
會輸出:
所以在這裡我們看到它可以在命令列上通過 2to3 轉換為 Python 3 程式碼。
Python 提供了自己的工具,名為 2to3.py,它執行了一堆指令碼來將你的 Python 2 程式碼轉換為 3。雖然它並不完美,但它總體上做得非常出色。轉換任何程式碼後,您可以手動修復任何問題。
6、效能問題
此升級中已修復了大多數效能問題! 在比較兩個版本之間的基準時,差異幾乎可以忽略不計。
7、一些主要的內部事務變更
Python 2
- print 功能括號選填。
- 使用 u 作為字首字串以生成 unicode 字串。
- 整數除法總是返回整數 -5/2=2。
- Raw_input() 讀取字串。
- input() 評估讀取的資料。
- generator .next()。
Python 3:
- print 功能括號必填。
- 預設情況下為字串 unicode。
- 整數除法可能導致浮動 -5/2=2.5。
- Raw_input() 不可用。
- 輸入始終讀取字串。
- Next (generator)。
- Py2 to py3 實用程式。
- Dictionary .keys() 和 .values() 返回的為檢視不是列表。
- 在非自然比較中不能再使用比較運算子。
例如,None < None 將引發 TypeError 而不是返回 false。 - 不推薦使用百分比(%)字串格式化運算子,使用 .format() 函式或連線。