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 |