Python專題(一)Python基礎(chǔ)入門簡(jiǎn)介

一顷歌、Python介紹

Python的創(chuàng)始人為吉多·范羅蘇姆(Guido van Rossum)瘟判。1989年的圣誕節(jié)期間恢总,吉多·范羅蘇姆為了在阿姆斯特丹打發(fā)時(shí)間牡肉,決心開(kāi)發(fā)一個(gè)新的腳本解釋程序,作為ABC語(yǔ)言的一種繼承钻注。
最新的TIOBE排行榜蚂且,Python趕超PHP占據(jù)第五, Python崇尚優(yōu)美幅恋、清晰杏死、簡(jiǎn)單,是一個(gè)優(yōu)秀并廣泛使用的語(yǔ)言捆交。

Python語(yǔ)言排行

由上圖可見(jiàn)淑翼,Python整體呈上升趨勢(shì),反映出Python應(yīng)用越來(lái)越廣泛并且也逐漸得到業(yè)內(nèi)的認(rèn)可F纷贰Pā!

Python可以應(yīng)用于眾多領(lǐng)域肉瓦,如:數(shù)據(jù)分析遭京、組件集成、網(wǎng)絡(luò)服務(wù)泞莉、圖像處理哪雕、數(shù)值計(jì)算和科學(xué)計(jì)算等眾多領(lǐng)域。目前業(yè)內(nèi)幾乎所有大中型互聯(lián)網(wǎng)企業(yè)都在使用Python鲫趁,如:Youtube斯嚎、Dropbox、BT饮寞、Quora(中國(guó)知乎)孝扛、豆瓣、知乎幽崩、Google苦始、Yahoo!、Facebook慌申、NASA陌选、百度、騰訊蹄溉、汽車之家咨油、美團(tuán)等。


目前Python主要應(yīng)用領(lǐng)域:

  • 云計(jì)算: 云計(jì)算最火的語(yǔ)言柒爵, 典型應(yīng)用OpenStack
  • WEB開(kāi)發(fā): 眾多優(yōu)秀的WEB框架役电,眾多大型網(wǎng)站均為Python開(kāi)發(fā),Youtube, Dropbox, 豆瓣等等棉胀。典型WEB框架Django法瑟。
  • 科學(xué)運(yùn)算冀膝、人工智能:典型庫(kù)NumPy, SciPy, Matplotlib, Enthought librarys,pandas
  • 系統(tǒng)運(yùn)維:運(yùn)維人員必備語(yǔ)言
  • 金融:量化交易,金融分析霎挟,在金融工程領(lǐng)域窝剖,Python不但在用,且用的最多酥夭,而且重要性逐年提高赐纱。原因:作為動(dòng)態(tài)語(yǔ)言的Python,語(yǔ)言結(jié)構(gòu)清晰簡(jiǎn)單熬北,庫(kù)豐富疙描,成熟穩(wěn)定,科學(xué)計(jì)算和統(tǒng)計(jì)分析都很牛逼蒜埋,生產(chǎn)效率遠(yuǎn)遠(yuǎn)高于c,c++,java,尤其擅長(zhǎng)策略回測(cè)
  • 圖形GUI: PyQT, WxPython,TkInter

Python在一些公司的應(yīng)用:

  • 谷歌:Google App Engine 淫痰、code.google.com 、Google earth 整份、谷歌爬蟲(chóng)待错、Google廣告等項(xiàng)目都在大量使用Python開(kāi)發(fā)
  • **CIA: **美國(guó)中情局網(wǎng)站就是用Python開(kāi)發(fā)的
  • **NASA: **美國(guó)航天局(NASA)大量使用Python進(jìn)行數(shù)據(jù)分析和運(yùn)算
  • YouTube:世界上最大的視頻網(wǎng)站YouTube就是用Python開(kāi)發(fā)的
  • Dropbox:美國(guó)最大的在線云存儲(chǔ)網(wǎng)站,全部用Python實(shí)現(xiàn)烈评,每天網(wǎng)站處理10億個(gè)文件的上傳和下載
  • Instagram:美國(guó)最大的圖片分享社交網(wǎng)站火俄,每天超過(guò)3千萬(wàn)張照片被分享,全部用Python開(kāi)發(fā)
  • Facebook:大量的基礎(chǔ)庫(kù)均通過(guò)Python實(shí)現(xiàn)的
  • **Redhat: **世界上最流行的Linux發(fā)行版本中的yum包管理工具就是用Python開(kāi)發(fā)的
  • **豆瓣: **公司幾乎所有的業(yè)務(wù)均是通過(guò)Python開(kāi)發(fā)的
  • **知乎: **國(guó)內(nèi)最大的問(wèn)答社區(qū)讲冠,通過(guò)Python開(kāi)發(fā)(國(guó)外Quora)
  • 春雨醫(yī)生:國(guó)內(nèi)知名的在線醫(yī)療網(wǎng)站是用Python開(kāi)發(fā)的
  • 除上面之外瓜客,還有搜狐、金山竿开、騰訊谱仪、盛大、網(wǎng)易否彩、百度疯攒、阿里、淘寶 列荔、土豆敬尺、新浪、果殼等公司都在使用Python完成各種各樣的任務(wù)贴浙。

Python是一門什么樣的語(yǔ)言砂吞?

編程語(yǔ)言主要從以下幾個(gè)角度為進(jìn)行分類,編譯型和解釋型崎溃、靜態(tài)語(yǔ)言和動(dòng)態(tài)語(yǔ)言蜻直、強(qiáng)類型定義語(yǔ)言和弱類型定義語(yǔ)言,每個(gè)分類代表什么意思呢,我們一起來(lái)看一下袭蝗。

編譯和解釋的區(qū)別是什么唤殴?

編譯器是把源程序的每一條語(yǔ)句都編譯成機(jī)器語(yǔ)言,并保存成二進(jìn)制文件,這樣運(yùn)行時(shí)計(jì)算機(jī)可以直接以機(jī)器語(yǔ)言來(lái)運(yùn)行此程序,速度很快;
解釋器則是只在執(zhí)行程序時(shí),才一條一條的解釋成機(jī)器語(yǔ)言給計(jì)算機(jī)來(lái)執(zhí)行,所以運(yùn)行速度是不如編譯后的程序運(yùn)行的快的.
這是因?yàn)橛?jì)算機(jī)不能直接認(rèn)識(shí)并執(zhí)行我們寫(xiě)的語(yǔ)句,它只能認(rèn)識(shí)機(jī)器語(yǔ)言(是二進(jìn)制的形式)

一般婆、低級(jí)語(yǔ)言與高級(jí)語(yǔ)言

  • 最初的計(jì)算機(jī)程序都是用0和1的序列表示的到腥,程序員直接使用的是機(jī)器指令,無(wú)需翻譯蔚袍,從紙帶打孔輸入即可執(zhí)行得到結(jié)果乡范。后來(lái)為了方便記憶,就將用0啤咽、1序列表示的機(jī)器指令都用符號(hào)助記晋辆,這些與機(jī)器指令一一對(duì)應(yīng)的助記符就成了匯編指令,從而誕生了匯編語(yǔ)言宇整。無(wú)論是機(jī)器指令還是匯編指令都是面向機(jī)器的瓶佳,統(tǒng)稱為低級(jí)語(yǔ)言。因?yàn)槭轻槍?duì)特定機(jī)器的機(jī)器指令的助記符鳞青,所以匯編語(yǔ)言是無(wú)法獨(dú)立于機(jī)器(特定的CPU體系結(jié)構(gòu))的霸饲。
  • 但匯編語(yǔ)言也是要經(jīng)過(guò)翻譯成機(jī)器指令才能執(zhí)行的,所以也有將運(yùn)行在一種機(jī)器上的匯編語(yǔ)言翻譯成運(yùn)行在另一種機(jī)器上的機(jī)器指令的方法臂拓,那就是交叉匯編技術(shù)厚脉。
  • 高級(jí)語(yǔ)言是從人類的邏輯思維角度出發(fā)的計(jì)算機(jī)語(yǔ)言,抽象程度大大提高胶惰,需要經(jīng)過(guò)編譯成特定機(jī)器上的目標(biāo)代碼才能執(zhí)行傻工,一條高級(jí)語(yǔ)言的語(yǔ)句往往需要若干條機(jī)器指令來(lái)完成。高級(jí)語(yǔ)言獨(dú)立于機(jī)器的特性是靠編譯器為不同機(jī)器生成不同的目標(biāo)代碼(或機(jī)器指令)來(lái)實(shí)現(xiàn)的孵滞。那具體的說(shuō)中捆,要將高級(jí)語(yǔ)言編譯到什么程度呢,這又跟編譯的技術(shù)有關(guān)了坊饶,既可以編譯成直接可執(zhí)行的目標(biāo)代碼泄伪,也可以編譯成一種中間表示,然后拿到不同的機(jī)器和系統(tǒng)上去執(zhí)行幼东,這種情況通常又需要支撐環(huán)境臂容,比如解釋器或虛擬機(jī)的支持,Java程序編譯成bytecode根蟹,再由不同平臺(tái)上的虛擬機(jī)執(zhí)行就是很好的例子脓杉。
  • 所以,說(shuō)高級(jí)語(yǔ)言不依賴于機(jī)器简逮,是指在不同的機(jī)器或平臺(tái)上高級(jí)語(yǔ)言的程序本身不變球散,而通過(guò)編譯器編譯得到的目標(biāo)代碼去適應(yīng)不同的機(jī)器。從這個(gè)意義上來(lái)說(shuō)散庶,通過(guò)交叉匯編蕉堰,一些匯編程序也可以獲得不同機(jī)器之間的可移植性凌净,但這種途徑獲得的移植性遠(yuǎn)遠(yuǎn)不如高級(jí)語(yǔ)言來(lái)的方便和實(shí)用性大。

二屋讶、編譯與解釋

  • 編譯是將源程序翻譯成可執(zhí)行的目標(biāo)代碼冰寻,翻譯與執(zhí)行是分開(kāi)的;而解釋是對(duì)源程序的翻譯與執(zhí)行一次性完成皿渗,不生成可存儲(chǔ)的目標(biāo)代碼斩芭。這只是表象,二者背后的最大區(qū)別是:對(duì)解釋執(zhí)行而言乐疆,程序運(yùn)行時(shí)的控制權(quán)在解釋器而不在用戶程序划乖;對(duì)編譯執(zhí)行而言,運(yùn)行時(shí)的控制權(quán)在用戶程序挤土。
  • 解釋具有良好的動(dòng)態(tài)特性和可移植性琴庵,比如在解釋執(zhí)行時(shí)可以動(dòng)態(tài)改變變量的類型、對(duì)程序進(jìn)行修改以及在程序中插入良好的調(diào)試診斷信息等仰美,而將解釋器移植到不同的系統(tǒng)上迷殿,則程序不用改動(dòng)就可以在移植了解釋器的系統(tǒng)上運(yùn)行。同時(shí)解釋器也有很大的缺點(diǎn)筒占,比如執(zhí)行效率低贪庙,占用空間大,因?yàn)椴粌H要給用戶程序分配空間翰苫,解釋器本身也占用了寶貴的系統(tǒng)資源止邮。
  • 編譯器是把源程序的每一條語(yǔ)句都編譯成機(jī)器語(yǔ)言,并保存成二進(jìn)制文件,這樣運(yùn)行時(shí)計(jì)算機(jī)可以直接以機(jī)器語(yǔ)言來(lái)運(yùn)行此程序,速度很快;
  • 而解釋器則是只在執(zhí)行程序時(shí),才一條一條的解釋成機(jī)器語(yǔ)言給計(jì)算機(jī)來(lái)執(zhí)行,所以運(yùn)行速度是不如編譯后的程序運(yùn)行的快的.

編譯型和解釋型

  • 我們先看看編譯型,其實(shí)它和匯編語(yǔ)言是一樣的:也是有一個(gè)負(fù)責(zé)翻譯的程序來(lái)對(duì)我們的源代碼進(jìn)行轉(zhuǎn)換奏窑,生成相對(duì)應(yīng)的可執(zhí)行代碼导披。這個(gè)過(guò)程說(shuō)得專業(yè)一點(diǎn),就稱為編譯(Compile)埃唯,而負(fù)責(zé)編譯的程序自然就稱為編譯器(Compiler)撩匕。
  • 如果我們寫(xiě)的程序代碼都包含在一個(gè)源文件中,那么通常編譯之后就會(huì)直接生成一個(gè)可執(zhí)行文件墨叛,我們就可以直接運(yùn)行了止毕。但對(duì)于一個(gè)比較復(fù)雜的項(xiàng)目,為了方便管理漠趁,我們通常把代碼分散在各個(gè)源文件中扁凛,作為不同的模塊來(lái)組織。這時(shí)編譯各個(gè)文件時(shí)就會(huì)生成目標(biāo)文件(Object file)而不是前面說(shuō)的可執(zhí)行文件闯传。一般一個(gè)源文件的編譯都會(huì)對(duì)應(yīng)一個(gè)目標(biāo)文件谨朝。
  • 這些目標(biāo)文件里的內(nèi)容基本上已經(jīng)是可執(zhí)行代碼了,但由于只是整個(gè)項(xiàng)目的一部分,所以我們還不能直接運(yùn)行字币。待所有的源文件的編譯都大功告成则披,我們就可以最后把這些半成品的目標(biāo)文件“打包”成一個(gè)可執(zhí)行文件了,這個(gè)工作由另一個(gè)程序負(fù)責(zé)完成洗出,由于此過(guò)程好像是把包含可執(zhí)行代碼的目標(biāo)文件連接裝配起來(lái)士复,所以又稱為鏈接(Link),而負(fù)責(zé)鏈接的程序就叫……就叫鏈接程序(Linker)共苛。鏈接程序除了鏈接目標(biāo)文件外判没,可能還有各種資源,像圖標(biāo)文件啊隅茎、聲音文件啊什么的,還要負(fù)責(zé)去除目標(biāo)文件之間的冗余重復(fù)代碼嫉沽,等等辟犀,所以……也是挺累的。鏈接完成之后绸硕,一般就可以得到我們想要的可執(zhí)行文件了堂竟。
  • 上面我們大概地介紹了編譯型語(yǔ)言的特點(diǎn),現(xiàn)在再看看解釋型玻佩。噢出嘹,從字面上看,“編譯”和“解釋”的確都有“翻譯”的意思咬崔,它們的區(qū)別則在于翻譯的時(shí)機(jī)安排不大一樣税稼。打個(gè)比方:假如你打算閱讀一本外文書(shū),而你不知道這門外語(yǔ)垮斯,那么你可以找一名翻譯郎仆,給他足夠的時(shí)間讓他從頭到尾把整本書(shū)翻譯好,然后把書(shū)的母語(yǔ)版交給你閱讀兜蠕;或者扰肌,你也立刻讓這名翻譯輔助你閱讀,讓他一句一句給你翻譯熊杨,如果你想往回看某個(gè)章節(jié)曙旭,他也得重新給你翻譯。
  • 兩種方式晶府,前者就相當(dāng)于我們剛才所說(shuō)的編譯型:一次把所有的代碼轉(zhuǎn)換成機(jī)器語(yǔ)言桂躏,然后寫(xiě)成可執(zhí)行文件;而后者就相當(dāng)于我們要說(shuō)的解釋型:在程序運(yùn)行的前一刻郊霎,還只有源程序而沒(méi)有可執(zhí)行程序沼头;而程序每執(zhí)行到源程序的某一條指令,則會(huì)有一個(gè)稱之為解釋程序的外殼程序?qū)⒃创a轉(zhuǎn)換成二進(jìn)制代碼以供執(zhí)行,總言之进倍,就是不斷地解釋土至、執(zhí)行、解釋猾昆、執(zhí)行……所以陶因,解釋型程序是離不開(kāi)解釋程序的。像早期的BASIC就是一門經(jīng)典的解釋型語(yǔ)言垂蜗,要執(zhí)行BASIC程序楷扬,就得進(jìn)入BASIC環(huán)境,然后才能加載程序源文件贴见、運(yùn)行烘苹。解釋型程序中,由于程序總是以源代碼的形式出現(xiàn)片部,因此只要有相應(yīng)的解釋器镣衡,移植幾乎不成問(wèn)題。
  • 編譯型程序雖然源代碼也可以移植档悠,但前提是必須針對(duì)不同的系統(tǒng)分別進(jìn)行編譯廊鸥,對(duì)于復(fù)雜的工程來(lái)說(shuō),的確是一件不小的時(shí)間消耗辖所,況且很可能一些細(xì)節(jié)的地方還是要修改源代碼惰说。而且,解釋型程序省卻了編譯的步驟缘回,修改調(diào)試也非常方便吆视,編輯完畢之后即可立即運(yùn)行,不必像編譯型程序一樣每次進(jìn)行小小改動(dòng)都要耐心等待漫長(zhǎng)的Compiling…Linking…這樣的編譯鏈接過(guò)程切诀。不過(guò)凡事有利有弊揩环,由于解釋型程序是將編譯的過(guò)程放到執(zhí)行過(guò)程中,這就決定了解釋型程序注定要比編譯型慢上一大截幅虑,像幾百倍的速度差距也是不足為奇的丰滑。
  • 編譯型與解釋型,兩者各有利弊倒庵。前者由于程序執(zhí)行速度快褒墨,同等條件下對(duì)系統(tǒng)要求較低,因此像開(kāi)發(fā)操作系統(tǒng)擎宝、大型應(yīng)用程序郁妈、數(shù)據(jù)庫(kù)系統(tǒng)等時(shí)都采用它,像C/C++绍申、Pascal/Object Pascal(Delphi)噩咪、VB等基本都可視為編譯語(yǔ)言顾彰,而一些網(wǎng)頁(yè)腳本、服務(wù)器腳本及輔助開(kāi)發(fā)接口這樣的對(duì)速度要求不高胃碾、對(duì)不同系統(tǒng)平臺(tái)間的兼容性有一定要求的程序則通常使用解釋性語(yǔ)言涨享,如Java、JavaScript仆百、VBScript厕隧、Perl、Python等等俄周。
  • 但既然編譯型與解釋型各有優(yōu)缺點(diǎn)又相互對(duì)立吁讨,所以一批新興的語(yǔ)言都有把兩者折衷起來(lái)的趨勢(shì),例如Java語(yǔ)言雖然比較接近解釋型語(yǔ)言的特征峦朗,但在執(zhí)行之前已經(jīng)預(yù)先進(jìn)行一次預(yù)編譯建丧,生成的代碼是介于機(jī)器碼和Java源代碼之間的中介代碼,運(yùn)行的時(shí)候則由JVM(Java的虛擬機(jī)平臺(tái)甚垦,可視為解釋器)解釋執(zhí)行茶鹃。
  • 它既保留了源代碼的高抽象、可移植的特點(diǎn)艰亮,又已經(jīng)完成了對(duì)源代碼的大部分預(yù)編譯工作,所以執(zhí)行起來(lái)比“純解釋型”程序要快許多挣郭。而像VB6(或者以前版本)迄埃、C#這樣的語(yǔ)言,雖然表面上看生成的是.exe可執(zhí)行程序文件兑障,但VB6編譯之后實(shí)際生成的也是一種中介碼侄非,只不過(guò)編譯器在前面安插了一段自動(dòng)調(diào)用某個(gè)外部解釋器的代碼(該解釋程序獨(dú)立于用戶編寫(xiě)的程序,存放于系統(tǒng)的某個(gè)DLL文件中流译,所有以VB6編譯生成的可執(zhí)行程序都要用到它)逞怨,以解釋執(zhí)行實(shí)際的程序體。C#(以及其它.net的語(yǔ)言編譯器)則是生成.net目標(biāo)代碼福澡,實(shí)際執(zhí)行時(shí)則由.net解釋系統(tǒng)(就像JVM一樣叠赦,也是一個(gè)虛擬機(jī)平臺(tái))進(jìn)行執(zhí)行。當(dāng)然.net目標(biāo)代碼已經(jīng)相當(dāng)“低級(jí)”革砸,比較接近機(jī)器語(yǔ)言了除秀,所以仍將其視為編譯語(yǔ)言,而且其可移植程度也沒(méi)有Java號(hào)稱的這么強(qiáng)大算利,Java號(hào)稱是“一次編譯册踩,到處執(zhí)行”,而.net則是“一次編碼效拭,到處編譯”暂吉。呵呵胖秒,當(dāng)然這些都是題外話了。
  • 總之慕的,隨著設(shè)計(jì)技術(shù)與硬件的不斷發(fā)展阎肝,編譯型與解釋型兩種方式的界限正在不斷變得模糊。

動(dòng)態(tài)語(yǔ)言和靜態(tài)語(yǔ)言

通常我們所說(shuō)的動(dòng)態(tài)語(yǔ)言业稼、靜態(tài)語(yǔ)言是指動(dòng)態(tài)類型語(yǔ)言和靜態(tài)類型語(yǔ)言盗痒。
1.動(dòng)態(tài)類型語(yǔ)言:動(dòng)態(tài)類型語(yǔ)言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語(yǔ)言,也就是說(shuō)低散,在用動(dòng)態(tài)類型的語(yǔ)言編程時(shí)俯邓,永遠(yuǎn)也不用給任何變量指定數(shù)據(jù)類型,該語(yǔ)言會(huì)在你第一次賦值給變量時(shí)熔号,在內(nèi)部將數(shù)據(jù)類型記錄下來(lái)稽鞭。Python和Ruby就是一種典型的動(dòng)態(tài)類型語(yǔ)言,其他的各種腳本語(yǔ)言如VBScript也多少屬于動(dòng)態(tài)類型語(yǔ)言引镊。
2.靜態(tài)類型語(yǔ)言:靜態(tài)類型語(yǔ)言與動(dòng)態(tài)類型語(yǔ)言剛好相反朦蕴,它的數(shù)據(jù)類型是在編譯其間檢查的,也就是說(shuō)在寫(xiě)程序時(shí)要聲明所有變量的數(shù)據(jù)類型弟头,C/C++是靜態(tài)類型語(yǔ)言的典型代表吩抓,其他的靜態(tài)類型語(yǔ)言還有C#、JAVA等赴恨。

強(qiáng)類型定義語(yǔ)言和弱類型定義語(yǔ)言

強(qiáng)類型定義語(yǔ)言:強(qiáng)制數(shù)據(jù)類型定義的語(yǔ)言疹娶。也就是說(shuō),一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類型伦连,如果不經(jīng)過(guò)強(qiáng)制轉(zhuǎn)換雨饺,那么它就永遠(yuǎn)是這個(gè)數(shù)據(jù)類型了。舉個(gè)例子:如果你定義了一個(gè)整型變量a,那么程序根本不可能將a當(dāng)作字符串類型處理惑淳。強(qiáng)類型定義語(yǔ)言是類型安全的語(yǔ)言额港。
弱類型定義語(yǔ)言:數(shù)據(jù)類型可以被忽略的語(yǔ)言。它與強(qiáng)類型定義語(yǔ)言相反, 一個(gè)變量可以賦不同數(shù)據(jù)類型的值歧焦。
強(qiáng)類型定義語(yǔ)言在速度上可能略遜色于弱類型定義語(yǔ)言移斩,但是強(qiáng)類型定義語(yǔ)言帶來(lái)的嚴(yán)謹(jǐn)性能夠有效的避免許多錯(cuò)誤。另外倚舀,“這門語(yǔ)言是不是動(dòng)態(tài)語(yǔ)言”與“這門語(yǔ)言是否類型安全”之間是完全沒(méi)有聯(lián)系的叹哭!
例如:Python是動(dòng)態(tài)語(yǔ)言,是強(qiáng)類型定義語(yǔ)言(類型安全的語(yǔ)言); VBScript是動(dòng)態(tài)語(yǔ)言痕貌,是弱類型定義語(yǔ)言(類型不安全的語(yǔ)言); JAVA是靜態(tài)語(yǔ)言风罩,是強(qiáng)類型定義語(yǔ)言(類型安全的語(yǔ)言)。

通過(guò)上面這些介紹舵稠,我們可以得出超升,python是一門動(dòng)態(tài)解釋性的強(qiáng)類型定義語(yǔ)言入宦。那這些基因使成就了Python的哪些優(yōu)缺點(diǎn)呢?我們繼續(xù)往下看室琢。

Python的優(yōu)缺點(diǎn)

先看優(yōu)點(diǎn):
1.Python的定位是“優(yōu)雅”乾闰、“明確”、“簡(jiǎn)單”盈滴,所以Python程序看上去總是簡(jiǎn)單易懂涯肩,初學(xué)者學(xué)Python,不但入門容易巢钓,而且將來(lái)深入下去病苗,可以編寫(xiě)那些非常非常復(fù)雜的程序。
2.開(kāi)發(fā)效率非常高症汹,Python有非常強(qiáng)大的第三方庫(kù)硫朦,基本上你想通過(guò)計(jì)算機(jī)實(shí)現(xiàn)任何功能,Python官方庫(kù)里都有相應(yīng)的模塊進(jìn)行支持背镇,直接下載調(diào)用后咬展,在基礎(chǔ)庫(kù)的基礎(chǔ)上再進(jìn)行開(kāi)發(fā),大大降低開(kāi)發(fā)周期瞒斩,避免重復(fù)造輪子破婆。
3高級(jí)語(yǔ)言————當(dāng)你用Python語(yǔ)言編寫(xiě)程序的時(shí)候,你無(wú)需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)
4.可移植性————由于它的開(kāi)源本質(zhì)胸囱,Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過(guò)改動(dòng)使它能夠工 作在不同平臺(tái)上)荠割。如果你小心地避免使用依賴于系統(tǒng)的特性,那么你的所有Python程序無(wú)需修改就幾乎可以在市場(chǎng)上所有的系統(tǒng)平臺(tái)上運(yùn)行
5.可擴(kuò)展性————如果你需要你的一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開(kāi)旺矾,你可以把你的部分程序用C或C++編寫(xiě),然后在你的Python程序中使用它們夺克。
6.可嵌入性————你可以把Python嵌入你的C/C++程序箕宙,從而向你的程序用戶提供腳本功能。

再看缺點(diǎn):
1.速度慢铺纽,Python 的運(yùn)行速度相比C語(yǔ)言確實(shí)慢很多柬帕,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑于使用Python的主要原因狡门,但其實(shí)這里所指的運(yùn)行速度慢在大多數(shù)情況下用戶是無(wú)法直接感知到的陷寝,必須借助測(cè)試工具才能體現(xiàn)出來(lái),比如你用C運(yùn)一個(gè)程序花了0.1s,用Python是0.01s,這樣C語(yǔ)言直接比Python快了10倍,算是非称淞螅夸張了凤跑,但是你是無(wú)法直接通過(guò)肉眼感知的,因?yàn)橐粋€(gè)正常人所能感知的時(shí)間最小單位是0.15-0.4s左右叛复,哈哈仔引。其實(shí)在大多數(shù)情況下Python已經(jīng)完全可以滿足你對(duì)程序速度的要求扔仓,除非你要寫(xiě)對(duì)速度要求極高的搜索引擎等,這種情況下咖耘,當(dāng)然還是建議你用C去實(shí)現(xiàn)的翘簇。
2.代碼不能加密,因?yàn)镻ython是解釋性語(yǔ)言儿倒,它的源碼都是以名文形式存放的版保,不過(guò)我不認(rèn)為這算是一個(gè)缺點(diǎn),如果你的項(xiàng)目要求源代碼必須是加密的夫否,那你一開(kāi)始就不應(yīng)該用Python來(lái)去實(shí)現(xiàn)彻犁。
3.線程不能利用多CPU問(wèn)題,這是Python被人詬病最多的一個(gè)缺點(diǎn)慷吊,GIL即全局解釋器鎖(Global Interpreter Lock)袖裕,是計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言解釋器用于同步線程的工具,使得任何時(shí)刻僅有一個(gè)線程在執(zhí)行溉瓶,Python的線程是操作系統(tǒng)的原生線程急鳄。在Linux上為pthread,在Windows上為Win thread堰酿,完全由操作系統(tǒng)調(diào)度線程的執(zhí)行疾宏。一個(gè)Python解釋器進(jìn)程內(nèi)有一條主線程,以及多條用戶程序的執(zhí)行線程触创。即使在多核CPU平臺(tái)上坎藐,由于GIL的存在,所以禁止多線程的并行執(zhí)行哼绑。關(guān)于這個(gè)問(wèn)題的折衷解決方法岩馍,我們?cè)谝院缶€程和進(jìn)程章節(jié)里再進(jìn)行詳細(xì)探討。

當(dāng)然抖韩,Python還有一些其它的小缺點(diǎn)蛀恩,在這就不一一列舉了,我想說(shuō)的是茂浮,任何一門語(yǔ)言都不是完美的双谆,都有擅長(zhǎng)和不擅長(zhǎng)做的事情,建議各位不要拿一個(gè)語(yǔ)言的劣勢(shì)去跟另一個(gè)語(yǔ)言的優(yōu)勢(shì)來(lái)去比較席揽,語(yǔ)言只是一個(gè)工具顽馋,是實(shí)現(xiàn)程序設(shè)計(jì)師思想的工具,就像我們之前中學(xué)學(xué)幾何時(shí)幌羞,有的時(shí)候需要要圓規(guī)寸谜,有的時(shí)候需要用三角尺一樣,拿相應(yīng)的工具去做它最擅長(zhǎng)的事才是正確的選擇新翎。之前很多人問(wèn)我Shell和Python到底哪個(gè)好程帕?我回答說(shuō)Shell是個(gè)腳本語(yǔ)言住练,但Python不只是個(gè)腳本語(yǔ)言,能做的事情更多愁拭,然后又有鉆牛角尖的人說(shuō)完全沒(méi)必要學(xué)Python, Python能做的事情Shell都可以做讲逛,只要你足夠牛B,然后又舉了用Shell可以寫(xiě)俄羅斯方塊這樣的游戲,對(duì)此我能說(shuō)表達(dá)只能是岭埠,不要跟SB理論盏混,SB會(huì)把你拉到跟他一樣的高度,然后用充分的經(jīng)驗(yàn)把你打倒惜论。

Python解釋器

當(dāng)我們編寫(xiě)Python代碼時(shí)许赃,我們得到的是一個(gè)包含Python代碼的以.py為擴(kuò)展名的文本文件。要運(yùn)行代碼馆类,就需要Python解釋器去執(zhí)行.py文件混聊。
由于整個(gè)Python語(yǔ)言從規(guī)范到解釋器都是開(kāi)源的,所以理論上乾巧,只要水平夠高句喜,任何人都可以編寫(xiě)Python解釋器來(lái)執(zhí)Python代碼(當(dāng)然難度很大)。事實(shí)上沟于,確實(shí)存在多種Python解釋器咳胃。

CPython

當(dāng)我們從Python官方網(wǎng)站下載并安裝好Python 2.7后,我們就直接獲得了一個(gè)官方版本的解釋器:CPython旷太。這個(gè)解釋器是用C語(yǔ)言開(kāi)發(fā)的展懈,所以叫CPython。在命令行下運(yùn)行python就是啟動(dòng)CPython解釋器供璧。
CPython是使用最廣的Python解釋器存崖。教程的所有代碼也都在CPython下執(zhí)行。

IPython

IPython是基于CPython之上的一個(gè)交互式解釋器睡毒,也就是說(shuō)金句,IPython只是在交互方式上有所增強(qiáng),但是執(zhí)行Python代碼的功能和CPython是完全一樣的吕嘀。好比很多國(guó)產(chǎn)瀏覽器雖然外觀不同,但內(nèi)核其實(shí)都是調(diào)用了IE贞瞒。
CPython用>>>作為提示符偶房,而IPython用In [序號(hào)]:作為提示符。

PyPy

PyPy是另一個(gè)Python解釋器军浆,它的目標(biāo)是執(zhí)行速度棕洋。PyPy采用JIT技術(shù),對(duì)Python代碼進(jìn)行動(dòng)態(tài)編譯(注意不是解釋)乒融,所以可以顯著提高Python代碼的執(zhí)行速度掰盘。
絕大部分Python代碼都可以在PyPy下運(yùn)行摄悯,但是PyPy和CPython有一些是不同的,這就導(dǎo)致相同的Python代碼在兩種解釋器下執(zhí)行可能會(huì)有不同的結(jié)果愧捕。如果你的代碼要放到PyPy下執(zhí)行奢驯,就需要了解PyPy和CPython的不同點(diǎn)

Jython

Jython是運(yùn)行在Java平臺(tái)上的Python解釋器次绘,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行瘪阁。

IronPython

IronPython和Jython類似,只不過(guò)IronPython是運(yùn)行在微軟.Net平臺(tái)上的Python解釋器邮偎,可以直接把Python代碼編譯成.Net的字節(jié)碼管跺。

小結(jié)

Python的解釋器很多,但使用最廣泛的還是CPython禾进。如果要和Java或.Net平臺(tái)交互豁跑,最好的辦法不是用Jython或IronPython,而是通過(guò)網(wǎng)絡(luò)調(diào)用來(lái)交互泻云,確保各程序之間的獨(dú)立性艇拍。

END.

OK今天就為大家介紹這么多了。
我是EC君壶愤,如果你喜歡我的文章淑倾,請(qǐng)幫忙點(diǎn)個(gè)關(guān)注!點(diǎn)個(gè)喜歡吧征椒!
也可以點(diǎn)擊作者信息娇哆,掃描微信二維碼關(guān)注我的個(gè)人微信公眾號(hào)。
你的鼓勵(lì)將是我們共同進(jìn)步的源泉勃救。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碍讨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蒙秒,更是在濱河造成了極大的恐慌勃黍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晕讲,死亡現(xiàn)場(chǎng)離奇詭異覆获,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瓢省,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門弄息,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人勤婚,你說(shuō)我怎么就攤上這事摹量。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵缨称,是天一觀的道長(zhǎng)凝果。 經(jīng)常有香客問(wèn)我,道長(zhǎng)睦尽,這世上最難降的妖魔是什么器净? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮骂删,結(jié)果婚禮上掌动,老公的妹妹穿的比我還像新娘。我一直安慰自己宁玫,他們只是感情好粗恢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著欧瘪,像睡著了一般眷射。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佛掖,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天妖碉,我揣著相機(jī)與錄音,去河邊找鬼芥被。 笑死欧宜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拴魄。 我是一名探鬼主播冗茸,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼匹中!你這毒婦竟也來(lái)了夏漱?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤顶捷,失蹤者是張志新(化名)和其女友劉穎挂绰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體服赎,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡葵蒂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了重虑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刹勃。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嚎尤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伍宦,我是刑警寧澤芽死,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布乏梁,位于F島的核電站,受9級(jí)特大地震影響关贵,放射性物質(zhì)發(fā)生泄漏遇骑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一揖曾、第九天 我趴在偏房一處隱蔽的房頂上張望落萎。 院中可真熱鬧,春花似錦炭剪、人聲如沸练链。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)媒鼓。三九已至,卻和暖如春错妖,著一層夾襖步出監(jiān)牢的瞬間绿鸣,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工暂氯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留潮模,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓痴施,卻偏偏與公主長(zhǎng)得像擎厢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晾剖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 文/Bruce.Liu1 1.Python前世今生 1.1.Python歷史 Python的創(chuàng)始人: Guido ...
    BruceLiu1閱讀 11,805評(píng)論 3 120
  • 本節(jié)內(nèi)容 Python介紹 發(fā)展史 Python 2 or 3? 安裝 Hello World程序 變量 用戶輸入...
    小小不懂11閱讀 3,418評(píng)論 2 30
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理齿尽,服務(wù)發(fā)現(xiàn)沽损,斷路器,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,478評(píng)論 6 427
  • 前言 東宮是我高中時(shí)期看的循头,也是我接觸匪大的第一篇小說(shuō)绵估,之前是不喜看小說(shuō)的,卻因?yàn)橐淮闻既粺o(wú)聊卡骂,墮入這片深水国裳,然后...
    簡(jiǎn)張閱讀 10,983評(píng)論 0 6