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

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