Python2與Python3的區別

SilenceHL發表於2021-04-04

宣告:以下內容均為我個人的理解,如果發現錯誤或者疑問可以聯絡我共同探討

簡介

目前用Python開發的專案有兩個Python版本,分別是Python2.x與Python3.x,由於Python3相對於python2有著較大的升級,所以Python3將會是現在與未來的主流版本。

Python3時間軸

  • Python3.0釋出於2008.12.3
  • Python3.1釋出於2009.6.27
  • Python3.2釋出於2011.2.20
  • Python 3.3 釋出於 2012.9.29
  • Python 3.4 釋出於 2014.3.16
  • Python 3.5 釋出於 2015.9.13
  • Python 3.6 釋出於 2016.12.23
  • Python3.7釋出於2018.6.27
  • Python3.8釋出於2019.10.14
  • Python 3.9釋出於 2020.10.5

為了不帶入過多的累贅,在Python3.0設計的時候沒有考慮向下相容,所以早期的專案都無法在Python3.0上正常執行。為了早期的專案可以逐步遷移到Python3.0,Python官方提供了Python2.6過度版本(基於Python2的語法與庫,允許使用部分Python3的語法和函式),2010年中推出Python2.7為最後一個Python2.x版本(Python2.7在2020年1月1日以後官方停止維護)。瞭解Python3版本的變化對我們日常開發與專案維護都十分重要

Python3.0後的變化

直譯器名稱

Python2.x的直譯器為python,Python3.x的直譯器為python3

其他語言實現的直譯器:

PyPy Python實現的Python直譯器,支援 JIT 即時編譯
cpython C語言基於官方版本實現的Python直譯器
Jython 執行在Java上的Python直譯器
IronPython 執行在.NET與Mono平臺的Python直譯器

字串

Python2中字串是基於ASCII編碼的str字串,當呼叫字串變數時會列印其bytes值(16進製表示的字串記憶體地址)。 而unicode是一個單獨的型別。

Python3中字串原生支援unicode,byte也變成了一個單獨的位元組類,並且Python3原始碼檔案預設使用utf-8編碼所以中文也可以做變數名。

import

Python2中import導包採用相對路徑,導致標準庫匯入變困難。

Python3中import導包採用絕對路徑

print

Python2中的print是一種特殊的語句,在Python3中print變成了print函式

range函式與xrange函式

xrange函式在Python3中被廢棄,range函式的機制進行修改實現了xrange函式返回可迭代物件的效果

老式類與新式類

Python2中存在老式類與新式類,在Python3中統一採用新式類(新式類申明要求繼承object),且必須使用新式類應用多重繼承

除法與取餘

  • Python2 中若兩個整形進行運算,結果為整形,但若其中有一個浮點數型別,則結果為浮點數。python3為真除法,運算結果為float型別。

  • Python2 中取餘返回小於除法運算結果的最大整數,從型別上講,與”/“運算子返回型別邏輯一致。Python3中與python2作用相同。

raw_input函式與input函式

raw_input函式在Python3中被廢棄,統一使用input函式

縮排

Python3採用更嚴格的縮排方式,tab和space不能共存

long

long整型被Python3廢棄,統一使用int,int具有long的特性

file

file函式被廢棄,統一使用open函式

不等運算子

Python3廢除<>,只有!=

方法返回值

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

next()函式

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

exec

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

has_key 函式

has_key 函式被 Python 廢棄,統一使用 in 關鍵詞

round函式

Python2中,round函式返回float型別值。Python3中,round函式返回int型別值。

比較運算子

Python2中任意兩個物件都可以比較。Python3中只有同一型別資料的物件才可以進行比較。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章