python2與python3的區別

2021-09-27 11:42:57 字數 3084 閱讀 4841

1. python3 對 unicode 字元的原生支援。

python2 中使用 ascii 碼作為預設編碼方式導致 string 有兩種型別 str 和 unicode,python3 只支援 unicode 的 string。

python3 預設str物件在python2中叫做 unicode ,

python3中字串與位元組之間相互轉換

a = b"hello, world!" # bytes object

b = 「hello, world!」 # str object

1.字串轉位元組 str --> bytes

print(str.encode(b)) # 預設 encoding=「utf-8」

print(bytes(b, encoding=「utf8」))

print(b.encode()) # 預設 encoding=「utf-8」

2.位元組轉字串 bytes --> str

print(bytes.decode(a)) # 預設encoding=「utf-8」

print(str(a, encoding=「utf-8」))

print(a.decode()) # 預設 encoding=「utf-8」

2. python3 採用的是絕對路徑的方式進行 import

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

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

4. python3 使用更加嚴格的縮排。python2 的縮排機制中,1 個 tab 和 8 個 space 是等價的,所以在縮排中可以同時允許 tab 和 space 在**中共存。這種等價機制會導致部分 ide 使用存在問題。

python3 中 1 個 tab 只能找另外乙個 tab 替代,因此 tab 和 space 共存會導致報錯:taberror:inconsistent use of tabs and spaces in indentation.

1. print 語句被 python3 廢棄,統一使用 print 函式

2. exec 語句被 python3 廢棄,統一使用 exec 函式

3. execfile 語句被 python3 廢棄,推薦使用exec(open("./filename").read())

4. 不相等操作符"<>「被 python3 廢棄,統一使用」!="

5. long 整數型別被 python3 廢棄,統一使用 int

6. xrange 函式被 python3 廢棄,統一使用 range,python3 中 range 的機制也進行修改並提高了大資料集生成效率

7. python3 中這些方法再不再返回 list 物件:dictionary 關聯的 keys()、values()、items(),zip(),map(),filter(),但是可以通過 list 強行轉換:

1. mydict=

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

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

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

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

13. 異常 standarderror 被 python3 廢棄,統一使用 exception

1. 浮點數除法操作符「/」和「//」的區別

「 / 」:

python2:若為兩個整形數進行運算,結果為整形,但若兩個數中有乙個為浮點數,則結果為浮點數;

python3:為真除法,運算結果不再根據參加運算的數的型別。

「//」:

python2:返回小於除法運算結果的最大整數;從型別上講,與"/"運算子返回型別邏輯一致。

python3:和 python2 運算結果一樣。

2. 異常丟擲和捕捉機制區別
python2

1. raise ioerror, "file error" #丟擲異常

2. except nameerror, err: #捕捉異常

python3

1. raise ioerror("file error") #丟擲異常

2. except nameerror as err: #捕捉異常

3. for 迴圈中變數值區別
python2,for 迴圈會修改外部相同名稱變數的值

1. i = 1

2. print ('comprehension: ', [i for i in range(5)])

3. print ('after: i =', i ) #i=4

python3,for 迴圈不會修改外部相同名稱變數的值

1. i = 1

2. print ('comprehension: ', [i for i in range(5)])

3. print ('after: i =', i ) #i=1

4. round 函式返回值區別
python2,round 函式返回 float 型別值

1. isinstance(round(15.5),int) #true

python3,round 函式返回 int 型別值

1. isinstance(round(15.5),float) #true

5. 比較操作符區別
python2 中任意兩個物件都可以比較

1. 11 < 'test' #true

python3 中只有同一資料型別的物件可以比較

1. 11 < 'test' # typeerror: unorderable types: int() < str()

Python 2 與Python 3的區別

1.除號 與整除號 python 2中,是整除 python 3中,是常規除法,是整除 2.raw input與input python 2用raw input python 3用input 都表示輸入函式。3.print與print 以及逗號 python 2中,print my print na...

Python3 與 Python2 的不同

至於學習 python3 和 python2,我了解到的觀點是這樣的。1 現在很多的專案都還是在用 python2,學習 python2 還是有意義的 2 python2 在 python 的官方已經公布了在什麼什麼時間停止維護,所以對於新手來說,學習 python2 的價值不是很大,所以直接 py...

Python2 與Python3 的區別

1.print函式 py2中print是乙個語法結構,如 print value py3中print是乙個函式,如 print value 2.除法運算 py2中兩個整數除法得到的是0,要想得到浮點數結果,則被除數或除數二者要有乙個是浮點數才行。如 print 1 4 0 print 1 4.0.2...