對(duì)于Python 腳本優(yōu)點(diǎn)介紹
下文介紹Python 腳本的文章,類似的,各種語(yǔ)言之間都互有差異,語(yǔ)言只是工具,要根據(jù)任務(wù)的不同選擇不同的工具,做專家系統(tǒng)就用Prolog,要跟操作系統(tǒng)底層交互就用C,跨平臺(tái)就用Java或Python。
一般來(lái)說(shuō)腳本語(yǔ)言的學(xué)習(xí)相比系統(tǒng)編程語(yǔ)言而言要更容易些,因?yàn)橄到y(tǒng)語(yǔ)言(如C/C++/Java)功能更加強(qiáng)大,語(yǔ)言復(fù)雜性高,學(xué)習(xí)周期長(zhǎng);從某種意義上說(shuō),腳本語(yǔ)言一句指令可以做更多事。
更加人性化,體現(xiàn)了機(jī)器為人服務(wù)的宗旨。因?yàn)橐粋€(gè)程序如果人做的少了,機(jī)器就相應(yīng)做的多了,正好符合自動(dòng)化的思想,發(fā)明機(jī)器就是為了要減輕人的勞動(dòng)。腳本語(yǔ)言從這個(gè)角度來(lái)說(shuō)是值得大力推崇的。
但是沒(méi)有什么是***的,讓機(jī)器做的太多的代價(jià)很有可能就是不如讓機(jī)器做的少運(yùn)行效率高。比如Python運(yùn)行時(shí)要做動(dòng)態(tài)的類型檢查,要耗費(fèi)機(jī)器運(yùn)行時(shí)間,在C等靜態(tài)編譯的語(yǔ)言中這個(gè)工作是留給人做了,還有一些類似的因素,因此C的效率比Python 腳本高很多。
垃圾回收(garbage collection,一下簡(jiǎn)稱GC)在當(dāng)前的版本中使用的是引用計(jì)數(shù)垃圾收集和可選的循環(huán)結(jié)構(gòu)垃圾空間掃描技術(shù),一旦對(duì)象變得‘不可達(dá)’的時(shí)候就會(huì)被回收,但是不保證能夠回收包含循環(huán)引用計(jì)數(shù)的內(nèi)存垃圾。引用計(jì)數(shù)的算法比較直觀:在每個(gè)存儲(chǔ)片中記錄了指向其的指針數(shù)目;在對(duì)存儲(chǔ)片進(jìn)行某些操作時(shí),對(duì)引用計(jì)數(shù)進(jìn)行更新。
分配一個(gè)存儲(chǔ)片時(shí)引用計(jì)數(shù)初始化為1,只要存儲(chǔ)片的引用被復(fù)制,引用計(jì)數(shù)加1,存儲(chǔ)片的引用被刪除時(shí),引用計(jì)數(shù)減1,如果引用計(jì)數(shù)減為0,則存儲(chǔ)片會(huì)由于不可達(dá)而被回收。
很明顯引用計(jì)數(shù)算法不能回收循環(huán)的數(shù)據(jù)結(jié)構(gòu);設(shè)想一個(gè)簡(jiǎn)單的場(chǎng)景:對(duì)象a一個(gè)成員指向?qū)ο骲,同時(shí)b也有一個(gè)成員指向a。而且代碼中只有引用a的部分,b對(duì)象只是輔助a對(duì)象而生成的,如果后來(lái)a對(duì)象被刪除了,那么a和b作為一個(gè)整體都變成內(nèi)存垃圾了。
理論上應(yīng)該都被內(nèi)存管理器刪除,但是由于引用計(jì)數(shù)算法每次只考察一個(gè)結(jié)點(diǎn),因此對(duì)于循環(huán)的數(shù)據(jù)結(jié)構(gòu)無(wú)法回收。所以在編程時(shí)應(yīng)盡量避免循環(huán)引用的情況出現(xiàn)。 Python語(yǔ)言的執(zhí)行效率跟C/C++/Java比起來(lái)要稍遜一籌,但是代碼長(zhǎng)度大大縮短,并且Python跨平臺(tái)、類庫(kù)豐富、語(yǔ)法簡(jiǎn)單、開發(fā)速度快。
因此常用Python代替C/Java構(gòu)建大程序,涉及到系統(tǒng)效率的地方可以考慮用C/C++實(shí)現(xiàn)。而且Python也可以做glue language(膠水語(yǔ)言),因?yàn)?FONT size=+0>Python跟C和Java的溝通能力非常的好。
.NET平臺(tái)上實(shí)現(xiàn)的Python;確切的說(shuō)Python for .NET是一種編譯器和運(yùn)行時(shí);它將 Python 腳本編譯成外部虛擬機(jī)的格式,并使得.NET類庫(kù)在Python語(yǔ)言中可用。IronPython .NET 平臺(tái)上的Python;相對(duì)于傳統(tǒng)的Python,IronPython支持可選的靜態(tài)編譯功能,靜態(tài)編譯過(guò)的IronPython程序就形成了常規(guī)的。
. NET可執(zhí)行文件(.EXE文件)。甚至還可以將IronPython程序靜態(tài)編譯為.NET動(dòng)態(tài)鏈接庫(kù)(.dll文件)并且供C#和VB.NET等. NET語(yǔ)言調(diào)用。Python自身的優(yōu)秀特性決定了其在實(shí)際應(yīng)用中的廣泛性??焖僭烷_發(fā);網(wǎng)絡(luò)服務(wù)器腳本;科學(xué)計(jì)算;文檔處理;數(shù)據(jù)庫(kù)編程;
嵌入開發(fā);GUI開發(fā);游戲開發(fā);移動(dòng)開發(fā)......Python 腳本擁有強(qiáng)大Python社區(qū)的支持,豐富的類庫(kù),以及C/C++/Java等語(yǔ)言提供可擴(kuò)展模塊。 摩爾定律斷言了處理器、內(nèi)存或者I/O設(shè)備等將不再大幅度影響程序的執(zhí)行效率,對(duì)于相當(dāng)一部分的應(yīng)用程序而言,實(shí)現(xiàn)同樣的功能。
用系統(tǒng)語(yǔ)言和腳本語(yǔ)言相比,生成代碼的運(yùn)行效率可能都會(huì)在可容忍的范圍內(nèi),但是腳本語(yǔ)言代碼量可能會(huì)低很多(Python和Java大約是1:6)。開發(fā)周期更短,而且現(xiàn)在很多常用的功能都已經(jīng)用系統(tǒng)語(yǔ)言實(shí)現(xiàn)了,可以作為功能模塊,配合腳本語(yǔ)言的glue功能,即可完成系統(tǒng)實(shí)現(xiàn)。
【編輯推薦】