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" 2File "<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 版本中,異常處理改變的地方主要在以下幾個方面:
- 在 Python 2.x 版本中,所有型別的物件都是直接被丟擲的,但是在 Python 3.x 版本中,只有繼承 BaseException 的物件才可以被丟擲。
- 在 Python 2.x 版本中,捕獲異常的語法是“except Exception,var:”;但在 Python 3.x 版本中,引入了 as 關鍵字,捕獲異常的語法變更為 “except Exception as var:”。
- 在 Python 3.x 版本中,處理異常用 “raise Exception(args)”代替了“raise Exception,args”。
- 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 替代。