核心類差別python
Python3對Unicode字符的原生支持app
Python2中使用 ASCII 碼做爲默認編碼方式致使string有兩種類型str和unicode,Python3只支持unicode的string。python2和python3字節和字符對應關係爲:函數
- 編碼&字符串 大數據
字符串:
py2:
unicode v = u"root" 本質上用unicode存儲(萬國碼)
(str/bytes) v = "root" 本質用字節存儲
py3:
str v = "root" 本質上用unicode存儲(萬國碼)
bytes v = b"root" 本質上用字節存儲
編碼:
py2:
- ascii
文件頭能夠修改:#-*- encoding:utf-8 -*-
py3:
- utf-8
文件頭能夠修改:#-*- encoding:utf-8 -*-
Python3採用的是絕對路徑的方式進行import。ui
Python2中相對路徑的import會致使標準庫導入變得困難(想象一下,同一目錄下有file.py,如何同時導入這個文件和標準庫file)。Python3中這一點將被修改,若是還須要導入同一目錄的文件必須使用絕對路徑,不然只能使用相關導入的方式來進行導入。編碼
Python2中存在老式類和新式類的區別,Python3統一採用新式類。新式類聲明要求繼承object,必須用新式類應用多重繼承。spa
Python3使用更加嚴格的縮進。Python2的縮進機制中,1個tab和8個space是等價的,因此在縮進中能夠同時容許tab和space在代碼中共存。這種等價機制會致使部分IDE使用存在問題。Python3中1個tab只能找另一個tab替代,所以tab和space共存會致使報錯:TabError: inconsistent use of tabs and spaces in indentation.code
print語句被python3廢棄,統一使用print函數對象
exec語句被python3廢棄,統一使用exec函數繼承
execfile語句被Python3廢棄,推薦使用exec(open("./filename").read())
不相等操做符"<>"被Python3廢棄,統一使用"!="
long整數類型被Python3廢棄,統一使用int
xrange函數被Python3廢棄,統一使用range,Python3中range的機制也進行修改並提升了大數據集生成效率
Python3中這些方法再再也不返回list對象:dictionary關聯的keys()、values()、items(),zip(),map(),filter(),可是能夠經過list強行轉換:
mydict={"a":1,"b":2,"c":3} mydict.keys() #<built-in method keys of dict object at 0x000000000040B4C8> list(mydict.keys()) #['a', 'c', 'b']
迭代器iterator的next()函數被Python3廢棄,統一使用next(iterator)
raw_input函數被Python3廢棄,統一使用input函數
字典變量的has_key函數被Python廢棄,統一使用in關鍵詞
file函數被Python3廢棄,統一使用open來處理文件,能夠經過io.IOBase檢查文件類型
apply函數被Python3廢棄
異常StandardError 被Python3廢棄,統一使用Exception
浮點數除法操做符/和//區別
異常拋出和捕捉機制區別
raise IOError, "file error" #拋出異常 except NameError, err: #捕捉異常
raise IOError("file error") #拋出異常 except NameError as err: #捕捉異常
for循環中變量值區別
i = 1 print ('comprehension: ', [i for i in range(5)]) print ('after: i =', i ) #i=4
Python3,for循環不會修改外部相同名稱變量的值
i = 1 print ('comprehension: ', [i for i in range(5)]) print ('after: i =', i ) #i=1
round函數返回值區別
isinstance(round(15.5),int) #True
isinstance(round(15.5),float) #True
比較操做符區別
11 < 'test' #True
11 < 'test' # TypeError: unorderable types: int() < str()