Python介紹
發展史
Python 2 or 3?
最新的TIOBE排行榜,Python追趕PHP佔據第五, Python崇尚優美、清晰、簡單,是一個優秀且廣泛使用的語言。
Python可應用於眾多領域,如:資料分析、元件整合、網路服務、影像處理、數值計算和科學計算等眾多領域。目前業界幾乎所有大中型網路企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。網路公司廣泛使用Python來做的事一般有:自動化維運、自動化測試、大數據分析、爬蟲、Web 等。
對於速度:高級語言在運行速度上無法與C相比
Python 和Java、C#等
對於使用:Linux原裝Python,其他語言沒有;以上幾門語言都有非常豐富的類庫支援
對於速度:Python在速度上可能稍顯色遜所以,Python和其他語言沒有什麼本質區別,其他差異在於:擅長某個領域、人才豐富、先入為主。
python是一門動態解釋性的強類型定義語言
優點:
速度慢,Python 的運行速度相比C語言慢很多,跟JAVA相比也要慢一些,因為Python是解釋型語言,你的程式碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時,所以很慢。而C程式是執行前直接編譯成CPU能執行的機器碼,所以非常快。但其實這裡所指的運作速度慢在多數情況下使用者是無法直接感知到的,必須藉助測試工具才能體現出來。
代碼不能加密,因為PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求源代碼必須是加密的,那你一開始就不應該用Python來去實現。
線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程式設計語言解釋器用於同步線程的工具,使得任何時刻只有一個執行緒在執行,Python的執行緒是作業系統的原生執行緒。在Linux上為pthread,在Windows上為Win thread,完全由作業系統調度執行緒的執行。一個python解釋器進程內有一條主線程,以及多條用戶程式的執行線程。即使在多核心CPU平台上,由於GIL的存在,所以禁止多執行緒的並行執行。關於這個問題的折衷解決方法,我們在以後線程和進程章節裡再進行詳細探討。
當我們寫Python程式碼時,我們得到的是一個包含Python程式碼的以.py為副檔名的文字檔。要運行程式碼,就需要Python解釋器去執行.py檔。
由於整個Python語言從規範到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執行Python程式碼(當然難度很高)。事實上,確實存在多種Python解釋器。
當我們從Python官方網站下載並安裝好Python 2.7後,我們就直接獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。在命令列下運行python就是啟動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的所有程式碼也都在CPython下執行。
IPython是基於CPython之上的一個互動式解釋器,也就是說,IPython只是在互動方式上有所增強,但是執行Python程式碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但核心其實都是呼叫了IE。
CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。
PyPy是另一個Python解釋器,它的目標是執行速度。 PyPy採用JIT技術,對Python程式碼進行動態編譯,所以可以顯著提高Python程式碼的執行速度。
絕大部分Python程式碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python程式碼在兩種解釋器下執行可能會有不同的結果。如果你的程式碼要放到PyPy下執行,就需要了解PyPy和CPython的不同點。
Jython是運行在Java平台上的Python解釋器,可以直接把Python程式碼編譯成Java字節碼執行。
IronPython和Jython類似,只不過IronPython是運行在微軟.Net平台上的Python解釋器,可以直接把Python程式碼編譯成.Net的字節碼。
Python的解釋器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平台交互,最好的方法不是用Jython或IronPython,而是透過網路呼叫來交互,確保各程式之間的獨立性。
1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯器。 Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
1991年,第一個Python編譯器誕生。它是用C語言實現的,並且能夠呼叫C語言的函式庫檔。從一出生,Python已經具有了:類,函數,異常處理,包含表和字典在內的核心資料類型,以及模組為基礎的拓展系統。
Granddaddy of Python web frameworks, Zope 1 was released in 1999
Python 1.0 - January 1994 增加了 2.0 - October 16, 2000,加入了內存回收機制,構成了現在Python語言框架的基礎
Python 2.4 - November 30, 2004, 同年目前最受歡迎的WEB框架Django 誕生
Pytept 2. - October 1, 2008
Python 2.7 - 2010 年7 月3 日
2014 年11 月,宣布將支援Python 2.7 到2020 年,並重申不會發布2.8 版本,因為用戶將在盡快遷移到
Guido van Rossum(Python 語言的原始創建者)決定正確清理 Python 2.x,而不是像2.x 系列中的新版本。最顯著的改進是更好的 Unicode 支援(預設所有文字字串都是 Unicode)以及更清晰的位元組/Unicode 分離。
此外,核心語言的幾個方面(例如print 和exec 是語句,整數使用Floor pision)已被調整為更容易讓新手學習並且與該語言的其餘部分更加一致,並且舊的缺陷已被刪除(例如,所有類別現在都是新樣式的,「range()」會傳回一個記憶體高效的可迭代,而不是2.x 中的列表)。
py2與3的詳細差異
PRINT IS A FUNCTION
該語句已替換為 print() 函數,並使用關鍵字參數取代舊語句(PEP 3105)大部分的特殊語法。範例:
Old: print "The answer is", 2*2 New: print("The answer is", 2*2) Old: print x, # Trailing comma suppresses newline New: print(x, end=" ") # Appends a space instead of a newline Old: print # Prints a newline New: print() # You must call the function! Old: print >>sys.stderr, "fatal error" New: print("fatal error", file=sys.stderr) Old: print (x, y) # prints repr((x, y)) New: print((x, y)) # Not the same as print(x, y)!
您也可以自訂項目之間的分隔符,例如:
print("There are <", 2**32, "> possibilities!", sep=""ALL IS UNICODE NOW (A, *REST,B)=RANGE(5)
<strong>>>> a,*rest,b = range(5) >>> a,rest,b (0, [1, 2, 3], 4) </strong>
某些庫改名了
|
|
ConfigParser |
configparser |
copy_reg
|
隊列 |
|
|
標記庫 |
_標記庫
|
repr |
|
test.support
|
|
|
|
還有誰不支援PYTHON3? |
主要軟體包的一個主要示例,其中移植到 3.x 絕非易事
|