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

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

1、print 函式

print語句沒有了,取而代之的是print()函式。 Python 2.6與Python 2.7部分地支援這種形式的print語法。在Python 2.6與Python 2.7裡面,以下三種形式是等價的:

print "cat"
print ("cat") #注意print後面有個空格
print("cat") #print()不能帶有任何其它引數

然而,Python 2.6實際已經支援新的print()語法:

from __future__ import print_function
print("cat", "dog", sep=', ')

2、Unicode

Python 2 有 ASCII str() 型別,unicode() 是單獨的,不是 byte 型別。

現在, 在 Python 3,我們最終有了 Unicode (utf-8) 字串,以及一個位元組類:byte 和 bytearrays。

版本 Python2 Python3
位元組字串 str bytes
文字字串 Unicode str

python2中預設的字串型別預設是ASCII,python3中預設的字串型別是Unicode。

由於 Python3.X 原始碼檔案預設使用utf-8編碼,這就使得以下程式碼是合法的:

Python 2.x >>> str = "我愛北京天安門" >>> str '\xc8\xcb\xc9\xfa\xbf\xe0\xb6\xcc\xa3\xac\xce\xd2\xb0\xaePython' >>> str = u"我愛北京天安門" >>> str u'\u4eba\u751f\u82e6\u77ed\uff0c\u6211\u7231Python'

Python 3.x

>>> str = "人生苦短,我愛Python" >>> str '人生苦短,我愛Python'

3、除法運算

Python中的除法較其它語言顯得非常高階,有套很複雜的規則。Python中的除法有兩個運算子,/和//

首先來說/除法: 在python 2.x中/除法就跟我們熟悉的大多數語言,比如Java啊C啊差不多,整數相除的結果是一個整數,把小數部分完全忽略掉,浮點數除法會保留小數點的部分得到一個浮點數的結果。在python 3.x中/除法不再這麼做了,對於整數之間的相除,結果也會是浮點數。

Python 2.x:

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5

Python 3.x:

>>> 1/2
0.5

而對於//除法,這種除法叫做floor除法,會對除法的結果自動進行一個floor操作,在python 2.x和python 3.x中是一致的。

python 2.x:

>>> -1 // 2
-1

python 3.x:

>>> -1 // 2
-1

4、異常

在 Python 3 中處理異常也輕微的改變了,在 Python 3 中我們現在使用 as 作為關鍵詞。

捕獲異常的語法由 except exc, var 改為 except exc as var

使用語法except (exc1, exc2) as var可以同時捕獲多種類別的異常。 Python 2.6已經支援這兩種語法。

  • 1. 在2.x時代,所有型別的物件都是可以被直接丟擲的,在3.x時代,只有繼承自BaseException的物件才可以被丟擲。
  • 2. 2.x raise語句使用逗號將丟擲物件型別和引數分開,3.x取消了這種奇葩的寫法,直接呼叫建構函式丟擲物件即可。

在2.x時代,異常在程式碼中除了表示程式錯誤,還經常做一些普通控制結構應該做的事情,在3.x中可以看出,設計者讓異常變的更加專一,只有在錯誤發生的情況才能去用異常捕獲語句來處理。

5、匯入

python2中的包匯入順序:標準庫—相對倒入(即當前目錄)—絕對匯入(sys.path)

python3中的包匯入順序:標準庫—絕對匯入(如果想要相對匯入,使用from .moudel)

6、類

python2中預設類是舊式類,需要顯式繼承新式類(object)來建立新式類。

python3中完全移除舊式類,所有類都是新式類,但仍可顯式繼承object類。

7、字典

python2中的dict類中的keys、values和items均返回list物件,iterkeys、itervalues和iteritems返回生成器物件。

python3中移除了list、只返回一個生成器的物件,只保留檢視(生成器),但方法名為:keys、values和items。

8、模組合併

python2中的StringIO和cStringIO合併為python3中的io

python2中的pickle和cPickle合併為python3中的pickle。

python2中的urllib、urllib2和urlparse合併為python3中的urllib

9、重新命名模組

Python2 Python3
ConfigParser Configparser
raw_input input
itertools.ifilter filter
itertools.imap map
reduce functools.reduce
xrange range
itertools.izip zip
SocketServer Socketserver