python2和python3的差異

2022-05-01 15:48:14 字數 2668 閱讀 2686

核心類差異

python3對unicode字元的原生支援

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。

python2中相對路徑的import會導致標準庫匯入變得困難(想象一下,同一目錄下有file.py,如何同時匯入這個檔案和標準庫file)。python3中這一點將被修改,如果還需要匯入同一目錄的檔案必須使用絕對路徑,否則只能使用相關匯入的方式來進行匯入。

python2中存在老式類和新式類的區別,python3統一採用新式類。新式類宣告要求繼承object,必須用新式類應用多重繼承。

python3使用更加嚴格的縮排。python2的縮排機制中,1個tab和8個space是等價的,所以在縮排中可以同時允許tab和space在**中共存。這種等價機制會導致部分ide使用存在問題。python3中1個tab只能找另外乙個tab替代,因此tab和space共存會導致報錯:taberror: inconsistent use of tabs and spaces in indentation.

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=

mydict.keys() #list(mydict.keys()) #['a', 'c', 'b']

迭代器iterator的next()函式被python3廢棄,統一使用next(iterator)

raw_input函式被python3廢棄,統一使用input函式

file函式被python3廢棄,統一使用open來處理檔案,可以通過io.iobase檢查檔案型別

異常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()

python3和python2的區別

1.效能 py3.0執行 pystone benchmark的速度比py2.5慢30 guido認為py3.0有極大的優化空間,在字串和整形操作上可 以取得很好的優化結果。py3.1效能比py2.5慢15 還有很大的提公升空間。2.編碼 py3.x原始碼檔案預設使用utf 8編碼,這就使得以下 是合...

Python2和Python3的比較

python2 python3 print fish print fish unicode 是單獨的 unicode utf 8 字串 b b china byte 和 bytearrays type b type bytes s b.decode 轉化成 string 型別b1 s encode ...

python3和python2的區別

這個星期開始學習python了,因為看的書都是基於python2.x,而且我安裝的是python3.1,所以書上寫的地方好多都不適用於python3.1,特意在google上search了一下3.x和2.x的區別。特此在自己的空間中記錄一下,以備以後查詢方便,也可以分享給想學習python的frie...