概要:
1.使用 Python2 ,不要使用 Python2.7 之前的版本匀钧;使用 Python3 翎碑,不要使用 Python3.4 之前的版本。
2.對同一份代碼之斯,不要為 Python2 和 Python3 分別維護(hù)分支日杈,應(yīng)充分使用 _future_ 庫,努力在一套代碼中兼容 Python2 和 Python3。
一. Python 語言的應(yīng)用場景
依據(jù) Python 官網(wǎng)給出的例子莉擒,Python 有以下幾個主要的應(yīng)用場景:
1. WEB 開發(fā)
Python 擁有諸多優(yōu)秀的 web 開發(fā)框架:Django
Tornado
Flask
酿炸,許多知名網(wǎng)站使用 Python 語言發(fā)開:豆瓣、知乎等涨冀。Python 作為 web 開發(fā)填硕,可以很好地滿足互聯(lián)網(wǎng)公司快速迭代的需求,另一方面 Python 語言用作 web 開發(fā)經(jīng)受住了大規(guī)模用戶并發(fā)訪問的考驗鹿鳖。
2. 用戶圖形接口
Python 標(biāo)準(zhǔn)庫提供了 tkInter
模塊支持GUI編程扁眯,此外也可以選擇 PyGObject
PyQt
PySIde
Kivy
wxPython
等編寫你的GUI應(yīng)用。
3. 數(shù)值計算和科學(xué)計算
Python 語言已逐漸取代 MATLAB 成為數(shù)值計算和科學(xué)計算最受歡迎的編程語言翅帜,常用的第三方庫包含:numpy
pandas
scipy
姻檀。
4. 系統(tǒng)管理
諸多使用廣泛、功能強(qiáng)大的系統(tǒng)管理工具都使用 Python 語言開發(fā):如云計算平臺 OpenStack
涝滴,自動化部署工具 Ansible
Salt
绣版。
5. 其他
Python 的應(yīng)用領(lǐng)域非常廣泛,除此之外狭莱,你還可以使用 pygame
開發(fā)游戲僵娃,使用 PIL
庫處理圖片,以及使用 NLTK
進(jìn)行自然語言分析腋妙。
二. Python 語言的缺點
1. 執(zhí)行效率不夠快
Python 是解釋執(zhí)行的語言默怨,不如 C/C++ 等編譯型語言的執(zhí)行速度快。項目中骤素,我們會分離一部分需要優(yōu)化速度的應(yīng)用匙睹,將其轉(zhuǎn)換為編譯好的擴(kuò)展。
2. GIL鎖限制并發(fā)
GIL 是 Python 全局解釋器鎖(Global Interppreter Lock
)济竹,當(dāng) Python 的默認(rèn)解釋器要執(zhí)行字節(jié)碼時痕檬,都需要先申請這個鎖。這意味著送浊,在使用多線程擴(kuò)展應(yīng)用程序時梦谜,將總是被這個全局解釋器鎖限制。這一設(shè)計源于歷史源于袭景,早期計算機(jī)的 CPU 均為單核唁桩,這個時候 GIL 起到了安全保護(hù)作用,隨著多處理器的普及耸棒,GIL 才成了 Python 的一個大問題荒澡。
另外,使用 Python 多線程處理 IO 密集型應(yīng)用是沒用問題的与殃,比如高延遲的網(wǎng)絡(luò)IO单山,磁盤讀寫IO碍现。因為 Python 解釋器在遇到 IO 等待時,會主動讓渡出 CPU 供其他線程使用米奸。
3. Python2 與 Python3 不兼容
如果一個普通的軟件或者開發(fā)者庫不能夠做到向后兼容
昼接,那么定會被用戶無情拋棄。Python 最大的槽點就是 Python2 和 Python3 不兼容躏升,目前 Python2 已停止維護(hù)辩棒,因此如果是開始一個新的項目,請使用 Python3 進(jìn)行膨疏。
但很多公司的老項目一睁,仍使用的是 Python2,遷移需要一定的階段佃却,因此了解 Python2 與 Python3 的關(guān)鍵區(qū)別者吁,在工作中也是一項必不可少的技能。
三. 確認(rèn) Python 版本
很多 Linux 系統(tǒng)都預(yù)裝了多個版本的標(biāo)準(zhǔn) CPython 運行環(huán)境饲帅。在命令行中輸入 python
命令之后复凳,究竟執(zhí)行那個版本呢?可以使用 --version
來運行 python
命令灶泵,以確認(rèn)所使用的具體 Python 版本育八。
mia@ubuntu:~$ python --version
Python 2.7.17
mia@ubuntu:~$ python3 --version
Python 3.6.5
如果是運行程序的時候想確認(rèn) Python 版本,可以借助內(nèi)置的 sys
模塊查詢:
>>> import sys
>>> print sys.version
2.7.17 (default, Feb 27 2021, 15:10:58)
[GCC 7.5.0]
>>>