1蚯斯,python的出生與應(yīng)用
python的創(chuàng)始人為吉多·范羅蘇姆(Guido van Rossum)鸭蛙。1989年的圣誕節(jié)期間最爬,吉多·范羅蘇姆(中文名字:龜叔)為了在阿姆斯特丹打發(fā)時間凫岖,決心開發(fā)一個新的腳本解釋程序,作為ABC語言的一種繼承返咱。
(龜叔:2005年加入谷歌至2012年钥庇,2013年加入Dropbox直到現(xiàn)在,依然掌握著Python發(fā)展的核心方向咖摹,被稱為仁慈的獨裁者)评姨。
2017年7月的TIOBE排行榜,Python已經(jīng)占據(jù)第四的位置萤晴, Python崇尚優(yōu)美吐句、清晰、簡單店读,是一個優(yōu)秀并廣泛使用的語言嗦枢。
由上圖可見,Python整體呈上升趨勢屯断,反映出Python應(yīng)用越來越廣泛并且也逐漸得到業(yè)內(nèi)的認可N穆病B屡怠!
Python可以應(yīng)用于眾多領(lǐng)域择葡,如:數(shù)據(jù)分析紧武、組件集成、網(wǎng)絡(luò)服務(wù)敏储、圖像處理阻星、數(shù)值計算和科學計算等眾多領(lǐng)域。目前業(yè)內(nèi)幾乎所有大中型互聯(lián)網(wǎng)企業(yè)都在使用Python已添,如:Youtube妥箕、Dropbox、BT更舞、Quora(中國知乎)畦幢、豆瓣、知乎缆蝉、Google宇葱、Yahoo!、Facebook刊头、NASA黍瞧、百度、騰訊原杂、汽車之家印颤、美團等。
目前Python主要應(yīng)用領(lǐng)域:
- 云計算: 云計算最火的語言穿肄, 典型應(yīng)用OpenStack
- WEB開發(fā): 眾多優(yōu)秀的WEB框架年局,眾多大型網(wǎng)站均為Python開發(fā),Youtube, Dropbox, 豆瓣咸产。矢否。。脑溢, 典型WEB框架有Django
- 科學運算兴喂、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系統(tǒng)運維: 運維人員必備語言
- 金融:量化交易,金融分析焚志,在金融工程領(lǐng)域衣迷,Python不但在用,且用的最多酱酬,而且重要性逐年提高壶谒。原因:作為動態(tài)語言的Python,語言結(jié)構(gòu)清晰簡單膳沽,庫豐富汗菜,成熟穩(wěn)定让禀,科學計算和統(tǒng)計分析都很牛逼,生產(chǎn)效率遠遠高于c,c++,java,尤其擅長策略回測
- 圖形GUI: PyQT, WxPython,TkInter
**Python在一些公司的應(yīng)用: **
- 谷歌:Google App Engine 陨界、code.google.com 巡揍、Google earth 、谷歌爬蟲菌瘪、Google廣告等項目都在大量使用Python開發(fā)
- CIA: 美國中情局網(wǎng)站就是用Python開發(fā)的
- NASA: 美國航天局(NASA)大量使用Python進行數(shù)據(jù)分析和運算
- YouTube:世界上最大的視頻網(wǎng)站YouTube就是用Python開發(fā)的
- Dropbox:美國最大的在線云存儲網(wǎng)站腮敌,全部用Python實現(xiàn),每天網(wǎng)站處理10億個文件的上傳和下載
- Instagram:美國最大的圖片分享社交網(wǎng)站俏扩,每天超過3千萬張照片被分享糜工,全部用python開發(fā)
- Facebook:大量的基礎(chǔ)庫均通過Python實現(xiàn)的
- Redhat: 世界上最流行的Linux發(fā)行版本中的yum包管理工具就是用python開發(fā)的
- 豆瓣: 公司幾乎所有的業(yè)務(wù)均是通過Python開發(fā)的
- 知乎: 國內(nèi)最大的問答社區(qū),通過Python開發(fā)(國外Quora)
- 春雨醫(yī)生:國內(nèi)知名的在線醫(yī)療網(wǎng)站是用Python開發(fā)的
- 除上面之外录淡,還有搜狐、金山嫉戚、騰訊、盛大彬檀、網(wǎng)易、百度凤覆、阿里链瓦、淘寶 拆魏、土豆、新浪渤刃、果殼等公司都在使用Python完成各種各樣的任務(wù)。
python發(fā)展史
- 1989年卖子,為了打發(fā)圣誕節(jié)假期略号,Guido開始寫Python語言的編譯器。Python這個名字洋闽,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言羽利,能符合他的理想:創(chuàng)造一種C和shell之間刊懈,功能全面这弧,易學易用,可拓展的語言皇帮。
- 1991年,第一個Python編譯器誕生属拾。它是用C語言實現(xiàn)的梯浪,并能夠調(diào)用C語言的庫文件。從一出生挂洛,Python已經(jīng)具有了:類,函數(shù)托酸,異常處理柒巫,包含表和詞典在內(nèi)的核心數(shù)據(jù)類型,以及模塊為基礎(chǔ)的拓展系統(tǒng)堡掏。
- Granddaddy of Python web frameworks, Zope 1 was released in 1999
- Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
- Python 2.0 - October 16, 2000,加入了內(nèi)存回收機制鹅龄,構(gòu)成了現(xiàn)在Python語言框架的基礎(chǔ)
- Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
- Python 2.5 - September 19, 2006
- Python 2.6 - October 1, 2008
- Python 2.7 - July 3, 2010
- In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
- Python 3.0 - December 3, 2008
- Python 3.1 - June 27, 2009
- Python 3.2 - February 20, 2011
- Python 3.3 - September 29, 2012
- Python 3.4 - March 16, 2014
- Python 3.5 - September 13, 2015
- Python 3.6 - December 16,2016
2亭畜,python是什么編程語言扮休。
編程語言主要從以下幾個角度為進行分類,編譯型和解釋型拴鸵、靜態(tài)語言和動態(tài)語言玷坠、強類型定義語言和弱類型定義語言,每個分類代表什么意思呢劲藐,我們一起來看一下八堡。
2.1 編譯型與解釋型聘芜。
編譯器是把源程序的每一條語句都編譯成機器語言,并保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;
而解釋器則是只在執(zhí)行程序時,才一條一條的解釋成機器語言給計算機來執(zhí)行,所以運行速度是不如編譯后的程序運行的快的.
這是因為計算機不能直接認識并執(zhí)行我們寫的語句,它只能認識機器語言(是二進制的形式)
編譯型
優(yōu)點:編譯器一般會有預編譯的過程對代碼進行優(yōu)化厉膀。因為編譯只做一次二拐,運行時不需要編譯凳兵,所以編譯型語言的程序執(zhí)行效率高》雇可以脫離語言環(huán)境獨立運行形庭。
缺點:編譯之后如果需要修改就需要整個模塊重新編譯。編譯的時候根據(jù)對應(yīng)的運行環(huán)境生成機器碼萨醒,不同的操作系統(tǒng)之間移植就會有問題,需要根據(jù)運行的操作系統(tǒng)環(huán)境編譯不同的可執(zhí)行文件囤踩。
解釋型
優(yōu)點:有良好的平臺兼容性晓褪,在任何環(huán)境中都可以運行,前提是安裝了解釋器(虛擬機)勤庐。靈活好港,修改代碼的時候直接修改就可以,可以快速部署媚狰,不用停機維護阔拳。
缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言辨宠。
2.2動態(tài)語言和靜態(tài)語言
通常我們所說的動態(tài)語言货裹、靜態(tài)語言是指動態(tài)類型語言和靜態(tài)類型語言。
(1)動態(tài)類型語言:動態(tài)類型語言是指在運行期間才去做數(shù)據(jù)類型檢查的語言赋兵,也就是說,在用動態(tài)類型的語言編程時叶组,永遠也不用給任何變量指定數(shù)據(jù)類型历造,該語言會在你第一次賦值給變量時,在內(nèi)部將數(shù)據(jù)類型記錄下來吭产。Python和Ruby就是一種典型的動態(tài)類型語言,其他的各種腳本語言如VBScript也多少屬于動態(tài)類型語言橄霉。
(2)靜態(tài)類型語言:靜態(tài)類型語言與動態(tài)類型語言剛好相反邑蒋,它的數(shù)據(jù)類型是在編譯其間檢查的,也就是說在寫程序時要聲明所有變量的數(shù)據(jù)類型覆糟,C/C++是靜態(tài)類型語言的典型代表遮咖,其他的靜態(tài)類型語言還有C#、JAVA等麦箍。
2.3強類型定義語言和弱類型定義語言
(1)強類型定義語言:強制數(shù)據(jù)類型定義的語言陶珠。也就是說,一旦一個變量被指定了某個數(shù)據(jù)類型揍诽,如果不經(jīng)過強制轉(zhuǎn)換,那么它就永遠是這個數(shù)據(jù)類型了渠啤。舉個例子:如果你定義了一個整型變量a,那么程序根本不可能將a當作字符串類型處理。強類型定義語言是類型安全的語言。
(2)弱類型定義語言:數(shù)據(jù)類型可以被忽略的語言租副。它與強類型定義語言相反, 一個變量可以賦不同數(shù)據(jù)類型的值僵腺。
強類型定義語言在速度上可能略遜色于弱類型定義語言壶栋,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。另外丧没,“這門語言是不是動態(tài)語言”與“這門語言是否類型安全”之間是完全沒有聯(lián)系的锡移!
例如:Python是動態(tài)語言,是強類型定義語言(類型安全的語言); VBScript是動態(tài)語言夺饲,是弱類型定義語言(類型不安全的語言); JAVA是靜態(tài)語言施符,是強類型定義語言(類型安全的語言)。
通過上面這些介紹戳吝,我們可以得出听哭,python是一門動態(tài)解釋性的強類型定義語言。
3,python的優(yōu)缺點陆盘。
先看優(yōu)點
- Python的定位是“優(yōu)雅”、“明確”太防、“簡單”酸员,所以Python程序看上去總是簡單易懂,初學者學Python醇王,不但入門容易崭添,而且將來深入下去叛氨,可以編寫那些非常非常復雜的程序棘伴。
- 開發(fā)效率非常高屁置,Python有非常強大的第三方庫,基本上你想通過計算機實現(xiàn)任何功能阱穗,Python官方庫里都有相應(yīng)的模塊進行支持使鹅,直接下載調(diào)用后,在基礎(chǔ)庫的基礎(chǔ)上再進行開發(fā)患朱,大大降低開發(fā)周期裁厅,避免重復造輪子。
- 高級語言————當你用Python語言編寫程序的時候执虹,你無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細節(jié)
- 可移植性————由于它的開源本質(zhì),Python已經(jīng)被移植在許多平臺上(經(jīng)過改動使它能夠工 作在不同平臺上)撞叽。如果你小心地避免使用依賴于系統(tǒng)的特性插龄,那么你的所有Python程序無需修改就幾乎可以在市場上所有的系統(tǒng)平臺上運行
- 可擴展性————如果你需要你的一段關(guān)鍵代碼運行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫糠雨,然后在你的Python程序中使用它們徘跪。
- 可嵌入性————你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能松邪。
再看缺點:
- 速度慢哨查,Python 的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些邮府,因此這也是很多所謂的大牛不屑于使用Python的主要原因,但其實這里所指的運行速度慢在大多數(shù)情況下用戶是無法直接感知到的褂傀,必須借助測試工具才能體現(xiàn)出來,比如你用C運一個程序花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是非惩ǎ夸張了叠国,但是你是無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小單位是0.15-0.4s左右讹挎,哈哈吆玖。其實在大多數(shù)情況下Python已經(jīng)完全可以滿足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等怜奖,這種情況下翅阵,當然還是建議你用C去實現(xiàn)的。
- 代碼不能加密掷匠,因為PYTHON是解釋性語言讹语,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點顽决,如果你的項目要求源代碼必須是加密的才菠,那你一開始就不應(yīng)該用Python來去實現(xiàn)。
- 線程不能利用多CPU問題赋访,這是Python被人詬病最多的一個缺點缓待,GIL即全局解釋器鎖(Global Interpreter Lock)命斧,是計算機程序設(shè)計語言解釋器用于同步線程的工具嘱兼,使得任何時刻僅有一個線程在執(zhí)行贤徒,Python的線程是操作系統(tǒng)的原生線程。在Linux上為pthread踢涌,在Windows上為Win thread序宦,完全由操作系統(tǒng)調(diào)度線程的執(zhí)行。一個python解釋器進程內(nèi)有一條主線程潘明,以及多條用戶程序的執(zhí)行線程秕噪。即使在多核CPU平臺上,由于GIL的存在腌巾,所以禁止多線程的并行執(zhí)行。關(guān)于這個問題的折衷解決方法吓坚,我們在以后線程和進程章節(jié)里再進行詳細探討灯荧。
當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py
為擴展名的文本文件客税。要運行代碼撕贞,就需要Python解釋器去執(zhí)行.py
文件。
由于整個Python語言從規(guī)范到解釋器都是開源的秧均,所以理論上,只要水平夠高锯七,任何人都可以編寫Python解釋器來執(zhí)行Python代碼(當然難度很大)誉己。事實上,確實存在多種Python解釋器噪猾。
4筑累,python的種類。
CPython
當我們從Python官方網(wǎng)站下載并安裝好Python 3.6后坪蚁,我們就直接獲得了一個官方版本的解釋器:CPython镜沽。這個解釋器是用C語言開發(fā)的,所以叫CPython淘邻。在命令行下運行python
就是啟動CPython解釋器宾舅。
CPython是使用最廣的Python解釋器。教程的所有代碼也都在CPython下執(zhí)行筹我。
IPython
IPython是基于CPython之上的一個交互式解釋器蔬蕊,也就是說,IPython只是在交互方式上有所增強岸夯,但是執(zhí)行Python代碼的功能和CPython是完全一樣的猜扮。好比很多國產(chǎn)瀏覽器雖然外觀不同,但內(nèi)核其實都是調(diào)用了IE旅赢。
CPython用>>>
作為提示符,而IPython用In [``序號``]:
作為提示符短纵。
PyPy
PyPy是另一個Python解釋器,它的目標是執(zhí)行速度鱼冀。PyPy采用JIT技術(shù)养渴,對Python代碼進行動態(tài)編譯(注意不是解釋)泛烙,所以可以顯著提高Python代碼的執(zhí)行速度蔽氨。
絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的鹉究,這就導致相同的Python代碼在兩種解釋器下執(zhí)行可能會有不同的結(jié)果。如果你的代碼要放到PyPy下執(zhí)行妈嘹,就需要了解PyPy和CPython的不同點绍妨。
Jython
Jython是運行在Java平臺上的Python解釋器他去,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行。
IronPython
IronPython和Jython類似爆价,只不過IronPython是運行在微軟.Net平臺上的Python解釋器媳搪,可以直接把Python代碼編譯成.Net的字節(jié)碼。
小結(jié):
Python的解釋器很多秦爆,但使用最廣泛的還是CPython鲜结。如果要和Java或.Net平臺交互活逆,最好的辦法不是用Jython或IronPython拗胜,而是通過網(wǎng)絡(luò)調(diào)用來交互,確保各程序之間的獨立性锈遥。
轉(zhuǎn):https://www.cnblogs.com/jin-xin/articles/7459977.html#title-2-5-0