宣告:以下內容均為我個人的理解,如果發現錯誤或者疑問可以聯絡我共同探討
簡介
目前用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導包採用絕對路徑
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 協議》,轉載必須註明作者和本文連結