Python的簡要介紹
Python是一種多模型的、開源衷模、跨平臺的腳本語言泉孩、高級編程語言、通用型編程語言萧芙,由吉多·范羅蘇姆(Guido van Rossum)在1989年圣誕節(jié)期間给梅,為了打發(fā)無聊的圣誕節(jié)而編寫乙嘀。
Python是多模型的,指的是它同時(shí)支持面向過程和面向?qū)ο?/strong>的程序設(shè)計(jì)破喻,程序設(shè)計(jì)方式靈活虎谢。
Python是開源的,指的是它由非盈利組織——Python軟件基金會(huì)(Python Software Foundation, PSF)擁有曹质、管理婴噩,由社區(qū)驅(qū)動(dòng),解釋器源代碼公開羽德,屬于自由軟件几莽。它在開源促進(jìn)會(huì)(Open Source Initiative,
OSI)支持的開源許可證下開發(fā),使得它可以自由使用宅静、分發(fā)章蚣,用于商業(yè)目的也是可以的。這個(gè)許可證被PSF管理姨夹。
Python是跨平臺的纤垂,指的是它可以在多個(gè)操作系統(tǒng)上使用、運(yùn)行磷账,如Windows峭沦、Linux、Unix逃糟、macOS吼鱼。而且,對于絕大多數(shù)使用Python編寫的代碼而言绰咽,無需修改或僅需極少量修改即可直接在不同平臺上運(yùn)行菇肃。
Python是腳本語言(或:解釋型語言),指的是它利用解釋器將代碼一句一句直接運(yùn)行取募,不同于編譯型語言(通過編譯器將整個(gè)代碼編譯為機(jī)器碼琐谤,執(zhí)行、分發(fā)程序時(shí)只需編譯生成的機(jī)器碼文件矛辕;如C語言)笑跛。通常來說,Python程序的運(yùn)行需要解釋器和源代碼聊品,也可通過封裝的方式將其組合飞蹂,可以在未安裝解釋器的客戶端上使用。
Python是高級編程語言翻屈,指的是它使用類似于人類語言(而非機(jī)器語言)的語言形式來書寫代碼陈哑,具有較高的可讀性。
Python是通用型的編程語言,指的是它可以編寫解決任何問題的應(yīng)用程序惊窖。
Python的優(yōu)勢與劣勢
前面提到過刽宪,Python是通用型的編程語言,指的是它可以編寫解決任何問題的應(yīng)用程序界酒。
不過圣拄,這并不是Python的優(yōu)勢:它可以寫的東西,其他語言也可以寫毁欣。
Python相對于其他語言有兩個(gè)明顯的優(yōu)勢:
第一庇谆,它提供了非常完善的基礎(chǔ)代碼庫,覆蓋了網(wǎng)絡(luò)凭疮、文件饭耳、GUI、數(shù)據(jù)庫执解、文本等大量內(nèi)容寞肖,被形象地稱作“內(nèi)置電池(batteries included)”。用Python開發(fā)衰腌,許多功能不必從零編寫新蟆,直接使用現(xiàn)成的即可。
第二——也是最重要的桶唐,它擁有龐大的第三方庫栅葡,除了直接使用外茉兰,還可以通過pip尤泽、conda等軟件包管理工具來下載、安裝规脸、更新坯约,而且許多知名的第三方庫可以非常輕松地被調(diào)用,功能也相當(dāng)強(qiáng)大莫鸭。
作為腳本語言闹丐,Python的運(yùn)行效率不如編譯型語言,運(yùn)行相同功能的代碼所需時(shí)間更長被因。但是卿拴,隨著計(jì)算機(jī)硬件技術(shù)的發(fā)展,這樣的差別變得可以忽略梨与。
但是堕花,由于它是解釋型語言,所以依賴于解釋器粥鞋,在效率缘挽、對內(nèi)存的操作和處理器的控制明顯比編譯型語言弱。所以,它不適合寫系統(tǒng)軟件壕曼。尤其是操作系統(tǒng)苏研,由于高度依賴于硬件控制,它應(yīng)該是不能寫的腮郊。
而且摹蘑,由于iOS的生態(tài)系統(tǒng)的高度封閉性,它也不能直接寫iOS應(yīng)用轧飞;對于Android纹蝴,雖然有適用于Android的解釋器,但其封裝還是有難度的踪少,而且針對于Android上的Python的庫(尤其是GUI相關(guān)的庫)和文檔不發(fā)達(dá)塘安,所以它目前也不適宜寫Android應(yīng)用。
有很多人把Python當(dāng)作“膠水語言”來使用援奢,即使用Python將其他語言編寫的程序進(jìn)行集成和封裝兼犯。在Google內(nèi)部的很多項(xiàng)目,例如Google應(yīng)用服務(wù)引擎集漾,使用C++編寫性能要求極高的部分切黔,然后用Python或Java/Go調(diào)用相應(yīng)的模塊。
這很難講具篇,不過纬霞,2004年,Python已在Google內(nèi)部使用驱显,Google召募許多Python高手诗芜,但在這之前就已決定使用Python。他們的目的是盡量使用Python埃疫,在不得已時(shí)改用C++伏恐;在操控硬件的場合使用C++,在快速開發(fā)時(shí)候使用Python栓霜。
——馬特利(Alex Martelli)翠桦,《Python技術(shù)手冊》的作者
Python目前的應(yīng)用
很多大公司,包括Google胳蛮、Yahoo等销凑,甚至NASA(美國航空航天局)都大量地使用Python。
目前Python主要有下列熱門領(lǐng)域的應(yīng)用:
爬蟲
使用Requests構(gòu)建HTTP請求仅炊,使用selenium和PhantomJS獲取網(wǎng)頁內(nèi)容斗幼,使用BeautifulSoup解析HTML,可以高效地爬取數(shù)據(jù)茂洒。-
科學(xué)計(jì)算孟岛、數(shù)據(jù)分析與數(shù)據(jù)可視化
使用NumPy瓶竭、SciPy、matplotlib渠羞、Pandas斤贰、wordcloud等第三方庫進(jìn)行高等數(shù)學(xué)、線性代數(shù)等相關(guān)的科學(xué)計(jì)算次询、對數(shù)據(jù)進(jìn)行可視化輸出荧恍,使用jieba進(jìn)行分詞⊥偷酰可以部分替代付費(fèi)的MATLAB送巡、Office,而且在繪圖的信息獲取上比Office更加靈活盒卸。
-
人工智能與機(jī)器學(xué)習(xí)
谷歌開發(fā)維護(hù)的TensorFlow以Python為主骗爆,進(jìn)而推動(dòng)了其他的關(guān)于人工智能的開發(fā),所以現(xiàn)在凡是人工智能蔽介、機(jī)器學(xué)習(xí)摘投,都離不開Python。
-
交易
有人通過爬蟲爬取新聞和交易信息虹蓄,通過數(shù)據(jù)分析和預(yù)測輔助決策犀呼;有人寫出交易的程序,如vn.py薇组。
-
Web框架
有Django這樣的功能齊全的框架外臂,也有Flask、Tornado這樣的輕量級框架律胀。使用Python作為Web框架的最大的好處就是可以以網(wǎng)站的形式輕松解決上面的問題宋光。許多大型網(wǎng)站就是用Python開發(fā)的,例如YouTube累铅、Instagram跃须,還有國內(nèi)的豆瓣。
硬件控制與物聯(lián)網(wǎng)
盡管Python是解釋型語言娃兽,但樹莓派為代表的單板計(jì)算機(jī)解決了它在控制硬件上的問題。在它上面可以在Linux的環(huán)境下用Python控制GPIO尽楔,從而控制外圍硬件投储。另外,也有人正在開發(fā)硬件解釋器阔馋,可以在上面直接運(yùn)行Python代碼控制GPIO玛荞,如Python-on-a-chip。
兩大版本
Pyhon目前同時(shí)有兩個(gè)最新版本供下載呕寝。這是因?yàn)榧嫒菪缘膯栴}勋眯。
Python 3.0于2008年12月3日發(fā)布,此版由于追求語言設(shè)計(jì)上的完美、不帶入過多的累贅客蹋,不完全兼容之前的Python源代碼塞蹭。由于Python擁有大量的第三方庫,所以這些庫都需要重寫以兼容新版本讶坯。到了今天番电,由于3.x版越來越普及,許多主要的第三方庫都完成了適配或有了替代品辆琅,而且有一些已經(jīng)開始拋棄2.x版的適配漱办,所以現(xiàn)在建議使用3.x版本進(jìn)行Python開發(fā)。
以下如涉及到版本問題婉烟,使用“Python 2”“Python 3”指代對應(yīng)版本系統(tǒng)娩井。
在Python 3.0發(fā)布的時(shí)候,同期的Python 2的版本為2008年10月2日發(fā)布的Python 2.6.0似袁。在此及之后的Python 2版本中也可直接或間接使用Python 3的一些特性撞牢,但并不是完全兼容。而在Python 3中也附帶有2to3來將適配于Python 2的代碼轉(zhuǎn)換為適配于Python 3的代碼叔营,但也不是萬能的屋彪。
Python 2的最后的版本為Python 2.7绒尊,但也是有更新的畜挥。
但是,正是由于上面的問題婴谱,我們在學(xué)習(xí)Python的時(shí)候需要特別注意Python的版本蟹但。雖然Python是最近才走進(jìn)大眾的視野的,但是許多學(xué)校的圖書館很早就藏有關(guān)于Python的較老的書籍谭羔,而它們一般都是基于Python 2編寫的华糖,如果在Python 3下運(yùn)行會(huì)報(bào)錯(cuò)。而且瘟裸,一般的書籍不會(huì)標(biāo)注Python的版本號(也許是編寫時(shí)想不到新版的Python會(huì)這樣)兼搏!所以在圖書館借閱關(guān)于Python的書籍的話病线,必須要翻閱其中的代碼暖眼,以便辨認(rèn)版本。
據(jù)我的經(jīng)驗(yàn)区赵,查看代碼時(shí)络凿,只要找輸出(print
)語句,看它的寫法,十有八九就能準(zhǔn)確判斷版本:
Python 3中的輸出語句如同:
print("Hello World")
Python 2中的輸出語句如同:
print "Hello World"
簡而言之,就是帶不帶括號的區(qū)別:帶括號是3,不帶括號是2络断。
雖然Python 2.6襟沮、Python 2.7也可以在輸出語句上如同Python 3那樣寫膀跌,但是那個(gè)時(shí)候的程序員由于習(xí)慣原因是不會(huì)這么寫的遭商。
如果是購買書籍的話,如果是比較負(fù)責(zé)的編者或出版商捅伤,而且書籍是最近幾年發(fā)布的話劫流,這樣的問題可能會(huì)有所避免。
但是丛忆,Python 3與Python 2的區(qū)別絕不僅僅是print
語句的變化祠汇,還有許多。這不屬于本教程內(nèi)容熄诡,感興趣的話可以自行查閱可很。
本教程基于Python 3的最新版本。
作業(yè)
- 上面對于Python的簡要介紹中使用了一些詞語凰浮,我在這里對于它們的解釋并不完全我抠,請自行查找關(guān)于它們的更多信息,盡量搞懂它們袜茧。(其實(shí)“面向?qū)ο蟆蔽乙矝]搞懂……)
- 在Python界中有一句話:“人生苦短菜拓,我用Python〉严茫”根據(jù)本節(jié)講述內(nèi)容說明原因(當(dāng)然纳鼎,如果你愿意查找資料,也可以不限于本節(jié)內(nèi)容來說明)递递。
參考資料
除0.1節(jié)提到的之外喷橙,還有:
- About Python? | Python.org
https://www.python.org/about/ - Download Python | Python.org
https://www.python.org/downloads/ - matplotlib - 維基百科,自由的百科全書
https://zh.wikipedia.org/wiki/Matplotlib - TensorFlow
https://www.tensorflow.org/ - vn.py - 基于python的開源交易平臺開發(fā)框架 - vn.py
http://www.vnpy.org/ - The Web framework for perfectionists with deadlines | Django
https://www.djangoproject.com/ - Raspberry Pi - Raspberry Pi Hardware Guide requirements | Raspberry Pi Learning Resources
https://www.raspberrypi.org/learning/hardware-guide/components/raspberry-pi/