1. 程式人生 > 其它 >Python 2.x 與Python 3.x的區別

Python 2.x 與Python 3.x的區別

Python 3.x print函式代替了print語句

在 Python2.x 中,輸出資料使用的是 Print 語句,例如:

1 >>> print "3,4"
2 3,4
3 或者
4 >>> print(3,4)
5 (3,4)

但是在 Python 3.x 中,print 語句沒有了,取而代之的是 print 函式,例如:

1 >>> print(3,4)
2 3 4

如果還像 Python 2.x 中那樣使用 print 語句,Python 編譯器就會報錯,例如:

1 >>> print "3,4"
2
File "<stdin>", line 1 3 print "3,4" 4 ^ 5 SyntaxError: Missing parentheses in call to 'print'

Python 3.x 預設使用 UTF-8 編碼

相比 Python 2.x 預設採用的 ASCII 編碼,Python 3.x 預設使用 UTF-8 編碼,可以很好地支援中文或其它非英文字元。

例如,輸出一句中文,使用 Python 2.x 和 Python 3.x 的區別如下:

1 #Python 2.x
2 >>>str ="
C部落格園" 3 >>>str 4 'C\xe8\xaf\xad\xe8\xa8\x80\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91' 5 6 #Python 3.x 7 >>>str ="C部落格園" 8 >>>str 9 'C部落格園'

不僅如此,在 Python 3.x 中,下面的程式碼也是合法的:

1  >>>中國="China"
2  >>>print(中國)
3  China

Python 3.x 除法運算

和其他語言相比,Python 的除法運算要高階很多,它的除法運算包含 2 個運算子,分別是 / 和 //,這 2 個運算子在 Python 2.x 和 Python 3.x 的使用方法如下:

/ 運算子

在 Python 2.x 中,使用運算子 / 進行除法運算的方式和 Java、C 語言類似,整數相除的結果仍是一個整數,浮點數除法會保留小數點部分,例如:

1 >>>1/2
2 0
3 >>>1.0/2
4 0.5

但是在 Python 3.x 中使用 / 運算子,整數之間做除法運算,結果也會是浮點數。例如:

1 >>>1/2
2 0.5

運算子 //

使用運算子 // 進行的除法運算叫做 floor 除法,也就是輸出不大於結果值的一個最大的整數(向下取整)。此運算子的用法在 Python 2.x 和Python 3.x 中是一樣的,舉個例子:

1 #Python 2.x
2 >>> -1//2
3 -1
4 
5 #Python 3.x
6 >>> -1//2
7 -1

Python 3.x 異常

在 Python 3.x 版本中,異常處理改變的地方主要在以下幾個方面:

  1. 在 Python 2.x 版本中,所有型別的物件都是直接被丟擲的,但是在 Python 3.x 版本中,只有繼承 BaseException 的物件才可以被丟擲。
  2. 在 Python 2.x 版本中,捕獲異常的語法是“except Exception,var:”;但在 Python 3.x 版本中,引入了 as 關鍵字,捕獲異常的語法變更為 “except Exception as var:”。
  3. 在 Python 3.x 版本中,處理異常用 “raise Exception(args)”代替了“raise Exception,args”。
  4. Python 3.x 版本中,取消了異常類的序列行為和 .message 屬性。


有關 Python 2.x 版本和 Python 3.x 版本處理異常的示例程式碼如下所示:

 1 #Python 2.x
 2 >>> try:
 3 ...  raise TypeError,"型別錯誤"
 4 ... except TypeError,err:
 5 ...  print err.message
 6 ...
 7 型別錯誤
 8 
 9 #Python 3.x
10 >>> try:
11 ...     raise TypeError("型別錯誤")
12 ... except TypeError as err:
13 ...     print(err)
14 ...
15 型別錯誤

Python 3.x 八進位制字面量表示

在 Python 3.x 中,表示八進位制字面量的方式只有一種,並且必須寫成“0o1000”這樣的方式,原來“01000”的方式不能使用了。舉個例子:

 1 #Python 2.x
 2 >>> 0o1000
 3 512
 4 >>> 01000
 5 512
 6 
 7 #Python 3.x
 8 >>> 01000
 9   File "<stdin>", line 1
10     01000
11         ^
12 SyntaxError: invalid token
13 >>> 0o1000
14 512

Python 3.x 不等於運算子

Python 2.x 中的不等於運算子有 2 種寫法,分別為 != 和 <>,但在 Python 3.x 中去掉了 <>,只有 != 這一種寫法,例如:

 1 #Python 2.x
 2 >>> 1!=2
 3 True
 4 >>> 1<>2
 5 True
 6 
 7 #Python 3.x
 8 >>> 1!=2
 9 True
10 >>> 1<>2
11   File "<stdin>", line 1
12     1<>2
13       ^
14 SyntaxError: invalid syntax

Python 3.x 資料型別

Python 3.x 中對資料型別也做了改動,比如說:

Python 3.x 去除了 long 型別,現在只有一種整形 int,但它的行為就像是 Python 2.x 版本中的 long。

Python 3.x 新增了 bytes 型別,對應 Python 2.x 版本的八位串,定義 bytes 字面量的方法如下所示:

1 >>>b=b'China'
2 >>>type(b)
3 <type 'bytes'>

字串物件和 bytes 物件可以使用 .encode() 或者 .decode()方法相互轉化,例如:

1 >>>s=b.decode()
2 >>>s
3 'China'
4 >>>b1=s.encode()
5 >>>b1
6 b'China'

Python 3.x 中,字典的 keys()、items() 和 values() 方法用返回迭代器,且之前的 iterkeys() 等函式都被廢棄。同時去掉的還有 dict.has_key(),改為用 in 替代。