用Python的理由
現(xiàn)在有數(shù)百種編程語言可供使用,從成熟的C和C++到Ruby、C#和Lua等新秀,再到Java這樣的企業(yè)級重器。要選擇一門編程語言來學(xué)習(xí)確實很難。雖然沒有一種語言能適合任何場景,但我覺得,對于大量的編程問題來說,Python都算得上是個好選擇。如果正在學(xué)習(xí)編程,Python也是一個不錯的選擇。目前全球有數(shù)十萬名程序員都在使用Python,并且用戶數(shù)每年都在增長。
Python能夠持續(xù)吸引新用戶,是有很多理由的。Python是一款真正的跨平臺編程語言,從Windows、Linux/UNIX到Macintosh平臺,從超級計算機到手機,它都能很好地運行。Python可以用于開發(fā)小型應(yīng)用程序和快速原型系統(tǒng),但也能擴展到足以開發(fā)大型程序。Python自帶了功能強大且易于使用的圖形用戶界面(GUI)工具包、Web編程庫等。而且更重要的是,Python完全免費。
1.2 Python的長處
Python是Guido van Rossum在20世紀(jì)90年代研發(fā)的一種現(xiàn)代編程語言(以一個著名的喜劇團體命名)。盡管Python并不能完美地適用于所有應(yīng)用程序的開發(fā),但它的優(yōu)勢使其成為許多情況下的理想選擇。
1.2.1 Python易于使用
熟悉傳統(tǒng)語言的程序員會發(fā)現(xiàn),Python很容易學(xué)習(xí)。包含了所有熟悉的結(jié)構(gòu),如循環(huán)、條件語句、數(shù)組等,但在Python中很多都更易于使用。原因有以下幾點。
- 類型與對象關(guān)聯(lián),而不是變量。變量可以被賦予任何類型的值,列表也可以包含許多類型的對象。這也意味著通常不需要進行強制類型轉(zhuǎn)換(type casting),代碼再也不用受制于預(yù)先聲明的類型了。
- Python通常可以執(zhí)行更高級別的抽象操作。有一部分原因是源于Python語言的構(gòu)建方式,另一部分原因是Python的發(fā)行版附帶了內(nèi)容豐富的標(biāo)準(zhǔn)代碼庫。一個下載網(wǎng)頁的程序用兩三行代碼就可以寫完了!
- 語法規(guī)則非常簡單。雖然成為一名專業(yè)的Python高手需要耗費很多時間和精力,但即便是初學(xué)者也能快速獲取到足夠的Python語法并編寫出實用的代碼。
Python非常適合應(yīng)用程序的快速開發(fā)。用Python編寫應(yīng)用程序的時間可能只有用C或Java的五分之一,并且代碼行數(shù)只有等效C程序的五分之一,這種情況并不少見。當(dāng)然,這要視具體的應(yīng)用場景而定。對于那種大部分是在for循環(huán)中執(zhí)行整數(shù)運算的數(shù)值算法,Python提升的生產(chǎn)力會少得多。對于普通的應(yīng)用來說,生產(chǎn)力收益可能會比較可觀。
1.2.2 Python富有表現(xiàn)力
Python是一種極具表現(xiàn)力的編程語言。這里的“表現(xiàn)力”是指:同樣是一行代碼,Python可以完成的操作比其他大多數(shù)語言都要多。 表現(xiàn)力較強的語言,優(yōu)勢十分明顯,需要編寫的代碼越少,項目完成的速度就越快。代碼越少,程序就越容易維護和調(diào)試。
為了體會一下Python的表現(xiàn)力是如何簡化代碼的,請考慮交換兩個變量var1和var2的值。在類似Java的語言中,這需要3行代碼和1個額外的變量:
int temp = var1;
var1 = var2;
var2 = temp;
在將var2的值賦給var1時,需要先用變量temp暫存var1的值,然后再把該暫存值賦給var2。這個過程并不是很復(fù)雜,但是閱讀這3行代碼并理解這是為了完成數(shù)值交換,是要花些工夫的,即便是有經(jīng)驗的程序員也一樣。
相比之下,Python允許在一行代碼中完成相同的交換操作,并且從交換方式就能明顯看出交換確實發(fā)生了:
var2, var1 = var1, var2
當(dāng)然這只是一個很簡單的例子,但類似的優(yōu)點在Python中俯仰皆是。
1.2.3 Python可讀性好
Python的另一個優(yōu)點是可讀性好。也許讀者會認(rèn)為,編程語言只要能被計算機讀懂就可以了,但其實人類同樣得能讀懂。要閱讀代碼的人,可能是調(diào)試人員(很可能就是寫程序的人),可能是維護人員(仍然可能是寫程序的人),也可能是任何將來修改代碼的人。凡此種種,總之代碼越容易閱讀和理解越好。
代碼越容易理解,就越易于調(diào)試、維護和修改。Python在這方面的主要優(yōu)勢就是利用縮進。與大多數(shù)語言不同,Python堅持要求代碼塊必須整體縮進。盡管這會讓有些人感到奇怪,但好處就是代碼總是能以一種非常易懂的風(fēng)格進行格式化。
以下是兩小段程序,一個用Perl編寫,另一個用Python編寫。兩者的操作相同,參數(shù)都是兩個相同大小的數(shù)值列表,返回對其兩兩求和后的列表。我認(rèn)為Python代碼的可讀性比Perl代碼更好,看起來更干凈,難以理解的符號更少:
# Perl版
sub pairwise_sum {
my($arg1, $arg2) = @_;
my @result;
for(0..$#$arg1) {
push(@result, $arg1->[$_] + $arg2->[$_]);
}
return(\@result);
}
# Python版
def pairwise_sum(list1, list2):
result = []
for i in range(len(list1)):
result.append(list1[i] + list2[i])
return result
上面兩段代碼完成的工作相同,但Python代碼勝在了可讀性上。當(dāng)然,Perl還能有其他的實現(xiàn)方式,其中有一些確實會比以上代碼簡潔得多,但我認(rèn)為也更加晦澀難懂。
1.2.4 Python功能齊備
Python的另一個優(yōu)勢是“功能齊備”(batteries included)理念,因其自帶了很多函數(shù)庫。基本思路就是,安裝Python后就應(yīng)該萬事俱備,不需要再安裝其他庫就能真正開始工作了。這就是為什么Python的標(biāo)準(zhǔn)庫自帶了電子郵件、網(wǎng)頁、數(shù)據(jù)庫、操作系統(tǒng)調(diào)用、GUI開發(fā)等處理模塊。
例如,只需要寫兩行代碼,就可以用Python編寫一個Web服務(wù)器,用于共享某個目錄中的文件。
import http.server
http.server.test(HandlerClass=http.server.SimpleHTTPRequestHandler)
無須再安裝用于網(wǎng)絡(luò)連接和HTTP的庫,Python都已內(nèi)置好了,開箱即用。
1.2.5 Python跨平臺
Python還是一種優(yōu)秀的跨平臺語言,可以在很多平臺上運行,包括Windows、Mac、Linux、UNIX等。因為它是解釋型語言,相同代碼可以在任何裝有Python解釋器的平臺上運行,而目前幾乎所有平臺都具備了Python的解釋器。Python甚至還有在Java(Jython)和.NET(IronPython)中運行的版本,為運行Python提供了更多可能的平臺。
1.2.6 Python免費
Python還是免費的。自始至終,Python就是以開源的方式研發(fā)的,并且可以免費獲取。任一版本的Python都可自行下載和安裝,并可用于開發(fā)商業(yè)或個人應(yīng)用,分文不收。
雖然世人的態(tài)度在慢慢轉(zhuǎn)變,但由于擔(dān)心缺乏技術(shù)支持,擔(dān)心缺少付費客戶的影響力,有些人仍然對免費軟件持懷疑態(tài)度。但是Python已經(jīng)被許多大牌公司用于實現(xiàn)關(guān)鍵業(yè)務(wù),谷歌、Rackspace、Industrial Light&Magic和Honeywell只是其中的幾個例子。這些公司和許多其他公司都很清楚,Python是一個非常穩(wěn)定、可靠且支持良好的產(chǎn)品,擁有一個活躍的、博識的用戶社區(qū)。即便提出高難度的Python問題,也能在Python互聯(lián)網(wǎng)新聞組中迅速獲得答案,速度會比大多數(shù)技術(shù)支持電話快得多,而且無須付費、保證正確。
Python和開源軟件
不僅Python是免費的,它的源代碼也可以免費使用,可隨意進行修改、完善和擴展。因為源代碼是免費提供的,所以可供所有人查看并修改。其他那些帶有版權(quán)的軟件,鮮有能以合理的費用進行這種修改的。
如果是第一次接觸開源軟件,大家應(yīng)該要了解,不僅可以自由使用和修改Python,還能夠(也鼓勵)為其做出貢獻并對其進行改進。根據(jù)自身的條件、興趣和技能,可以給出財務(wù)上的貢獻,例如捐贈給Python軟件基金會(Python Software Foundation,PSF)。也可以參加特殊興趣小組(Special Interest Group,SIG),對Python內(nèi)核或某個輔助模塊的發(fā)行版進行測試并給出反饋。還可以向社區(qū)貢獻一些自己或公司開發(fā)的東西。當(dāng)然貢獻的大小完全是自行決定的,但只要有能力就一定要考慮去做點什么。這里正在創(chuàng)造巨大的價值,有機會就來添磚加瓦吧。
Python滿足了很多期許,表現(xiàn)力強大、可讀性好、內(nèi)置庫豐富、跨平臺,而且還是開源的。難道真的就完美無缺了嗎?
1.3 Python的短板
雖然Python擁有很多優(yōu)點,但沒有哪種編程語言能夠勝任所有工作,因此Python并不能完美地滿足一切需求。如果要確定Python是否適用于當(dāng)前場景,還需要了解Python不擅長的領(lǐng)域。
1.3.1 Python不是速度最快的語言
Python的執(zhí)行速度可能算得上是一個缺點。Python不是一個完全編譯的語言,而是先編譯為內(nèi)部字節(jié)碼形式,然后交由Python解釋器來執(zhí)行。Python為某些操作給出了高效的實現(xiàn),例如,用正則表達(dá)式解析字符串,可以做到與自己編寫的任何C語言代碼一樣快,甚至?xí)臁5诖蠖鄶?shù)情況下,采用Python會比C之類的語言實現(xiàn)更慢。但大家應(yīng)該保持以下觀點:對絕大多數(shù)應(yīng)用程序而言,現(xiàn)代計算機的計算能力都是過剩的。開發(fā)速度比程序運行速度更為重要,而Python程序通常編寫速度會快很多。另外,用C或C ++編寫的模塊對Python進行擴展也比較容易,程序當(dāng)中的CPU密集型部分可以交由這些模塊來運行。
1.3.2 Python的庫不算最多
雖然Python自帶了一批優(yōu)秀的函數(shù)庫集合,而且還有很多其他庫可用,但是Python在庫的數(shù)量上并不算領(lǐng)先。像C、Java和Perl之類的編程語言,可用的庫集合數(shù)量更為龐大。它們在某些領(lǐng)域提供的解決方案是Python所沒有的,或者Python可能只提供了其中的一種可選方案。不過這些往往是相當(dāng)專業(yè)的領(lǐng)域,而Python是很容易擴展的,既可以用Python,也可以用C或其他語言的現(xiàn)有庫。對于幾乎所有的常規(guī)計算問題,Python庫的支持能力都非常出色。
1.3.3 Python在編譯時不檢查變量類型
與某些其他編程語言不同,Python變量不像容器那樣工作,而更像是引用整數(shù)、字符串、類實例等各類對象的標(biāo)簽。這表示這些對象本身雖然是有類型的,但引用它們的變量并沒有與類型進行綁定。變量x可能在某一行代碼中引用一個字符串,而在另一行代碼中引用一個整數(shù):
Python將類型與對象關(guān)聯(lián),而不是與變量關(guān)聯(lián),這就意味著Python解釋器無法識別出變量類型不符的錯誤。假設(shè)變量count本來是用來保存整數(shù)的,但如果將字符串"two"賦給它,在Python里也完全沒問題。傳統(tǒng)的程序員將這種處理方式算作一個缺點,因為對代碼失去了額外的免費檢查。但是這種錯誤通常不難發(fā)現(xiàn)和修復(fù),Python的代碼檢測功能可以避免類型錯誤的發(fā)生。大多數(shù)Python程序員都認(rèn)為,動態(tài)類型的靈活性是劃得來的。
1.3.4 Python對移動應(yīng)用的支持不足
在過去的10年中,移動設(shè)備的數(shù)量和種類都出現(xiàn)了爆炸式的增長,到處都是智能手機、平板電腦、平板手機、Chromebook,運行的操作系統(tǒng)也是五花八門。Python在移動計算領(lǐng)域并不算強大。雖然有解決方案可選,但在移動設(shè)備上運行Python并不總是能一帆風(fēng)順,用Python編寫和發(fā)布商業(yè)應(yīng)用還存在問題。
1.3.5 Python對多處理器的利用不充分
現(xiàn)在多核處理器已經(jīng)普及,在很多情況下也都會帶來性能的明顯提升。但是,由于具有名為全局解釋器鎖(global interpreter lock,GIL)的特性,Python的標(biāo)準(zhǔn)版本并沒有按照多內(nèi)核來進行設(shè)計。詳情請查看David Beazley、Larry Hastings等人關(guān)于GIL的討論視頻,或者訪問Python wiki里的GIL頁面。盡管用Python可以運行并發(fā)進程,但如果需要“開箱即用”的并發(fā)能力,Python可能并不合適。
1.4 學(xué)Python 3的理由
Python很多年前就已經(jīng)出現(xiàn)了,并且還在不斷發(fā)展。本書第1版基于Python 1.5.2,Python 2.x作為主流版本已經(jīng)持續(xù)了很多年。本書是基于Python 3.6的,并在Python 3.7的Alpha版中通過了測試。
Python 3最初被異想天開地命名為Python 3000,因為它是Python歷史上第一個打破向下兼容的版本。這就意味著,如果不做任何修改,在低版本Python中編寫的代碼可能無法在Python 3下運行。例如,在低版本的Python中,print語句不需要在參數(shù)外面加上括號:
print "hello"
在Python 3中,print成了一個函數(shù),需要加上括號:
print("hello")
也許有人會想:既然會破壞以前的代碼,為什么還要修改這種細(xì)節(jié)呢?正因為對任何語言而言這種改動都是件大事,所以Python的核心開發(fā)人員仔細(xì)考慮過這個問題。盡管Python 3中的變化會破壞與舊代碼的兼容性,但這些變化很小,好處卻很多。新版本Python的一致性更好,更具可讀性,歧義也更少了。Python 3并不是翻天巨變,而是深思熟慮之后的演進。核心開發(fā)人員也貼心地提供了代碼遷移方案和工具,可以安全高效地將以前的舊代碼遷移到Python 3中,后續(xù)章節(jié)中將會介紹。此外還可以利用Six和Future庫來簡化代碼轉(zhuǎn)換操作。
為什么要學(xué)Python 3呢?因為它是迄今為止最好的Python版本。隨著很多項目開始充分利用Python 3的改進之處,它將成為未來幾年的主流Python版本。自從Python 3推出之后,庫的移植工作一直在穩(wěn)步進行。到目前為止,很多受歡迎的庫都已支持Python 3了。事實上,根據(jù)Python就緒頁面所示(http://py3readiness.org),360個最流行的庫中已有359個被移植到Python 3中了。如果確實需要使用未被轉(zhuǎn)換過的庫,或者要使用基于Python 2建立的代碼,那就繼續(xù)使用Python 2.x吧。但如果是剛開始學(xué)習(xí)Python或新建項目,就使用Python 3吧。Python 3不僅更好用,而且是大勢所趨。
1.5 小結(jié)
- Python是一種現(xiàn)代的高級語言,支持動態(tài)類型,帶有簡潔一致的語法和語義。
- Python跨平臺且高度模塊化,即適用于快速開發(fā),也適用于大規(guī)模編程。
- Python運行速度合理,還可以通過輕松擴展C或C++模塊進一步提升速度。
- Python內(nèi)置了很多高級特性,如對象持久化存儲、高級散列表、可擴展類的語法和通用比較函數(shù)。
- Python的庫包羅萬象,如數(shù)值計算、圖像處理、用戶界面和Web腳本處理。
- 有異常活躍的Python社區(qū)提供有力的支持。
本文摘自剛剛上架的 《Python 快速入門 第3版》
?
《Python 快速入門 第3版》([美]娜奧米·塞德(Naomi,Ceder))【摘要 書評 試讀】- 京東圖書?item.jd.com
- Python軟件基金會主席作品!
- 經(jīng)典Python入門書
本書是Python專業(yè)人士Naomi Ceder編寫的Python語言的綜合指南。她是一位經(jīng)驗豐富的教學(xué)者,她既能讓讀者關(guān)注語言的細(xì)節(jié),又能使其具備解決實際問題的能力。本書中配有大量貼切的示例和邊做邊學(xué)的習(xí)題,有助于讀者掌握每一個重要概念。無論讀者是要抓取網(wǎng)站內(nèi)容還是想玩轉(zhuǎn)嵌套元組,都會贊嘆本書的清晰、專注和對細(xì)節(jié)的重視。
本書主要內(nèi)容
● 明確涵蓋Python 3。
● 全面介紹核心庫、包和工具。
● 配備精深的習(xí)題。
● 新增5章與數(shù)據(jù)科學(xué)相關(guān)的內(nèi)容。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
