天天看點

《Python硬體程式設計實戰》——1.3 Python的特點

本節書摘來自華章計算機《python硬體程式設計實戰》一書中的第1章,第1.3節,作者:李茂 著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

1.3.1 作為腳本語言的優缺點

上面已經介紹過,python是一門腳本語言,也是一門解釋型語言。下面就來簡單解釋一下作為解釋型語言的python有哪些特點。

1.作為腳本語言的python的優點

快速開發:不需要編譯即可運作

正如前面的解釋,寫完python腳本後直接就可以運作而省去編譯的步驟,使用起來相對省事和高效。

2.作為腳本語言的python的缺點

性能相對不是特别強

python的性能相對一些其他語言(比如c、c++等)來說不是特别強。對于性能要求比較苛刻的某些領域不太适合全部使用python去實作所有的功能。現在已有的解決方法是:使用相對python性能更好的其他語言去實作與性能相關的最核心部分的功能,然後再将此部分整合到python内,這樣即可高效地實作程式的功能,又可以很大程度上提高開發的效率。

為何不說是python性能比較弱

此處之是以說是python的性能不是特别強,那是相對于更加底層的語言(比如c、c++等)來說的,并不是說python的性能本身很差。相對而言,c、c++等語言由于是編譯型語言并且更加面向底層,是以在性能方面與python等腳本語言相比,的确會更好一些。但是在現實中實作功能時,很多情況下并不那麼關注代碼本身的性能高低,而是更加關注完成任務的總體效率。

下面通過一個例子來解釋上面這句話的含義。

假如想要寫一段代碼用于實作一個功能,而下面是所需要花費的時間。

(1)寫代碼實作功能所花費的時間

寫c或c++代碼用了2天時間實作了功能。

用python寫代碼實作同樣的功能隻需半天時間。

(2)代碼運作所花費的時間

c或c++的性能比python好20%,運作程式實作功能花費了10秒。

python代碼效率稍差,比c或c++差20%,但運作程式實作功能也隻是花費了12秒左右。

(3)完成總體任務所花費的時間

總體上來說使用c或c++完成總體任務花費2天多時間。

總體上來說使用python完成總體任務隻花費半天左右時間。

如果要實作同樣的功能,很多使用者其實更加關注整體效率。是以,在使用python可以保持總體效率不太差但可以用更少的時間的前提下,使用者肯定會選擇python。此時使用者總體感覺就是:還是python更好用。

除了上述的例子,現實中還有很多類似的情況:80%的使用者隻是為了實作某些功能,對于相對較小的性能差異并不是很關心,此時我們更傾向于采用python實作程式的主體功能;而餘下的對性能要求比較高的20%的情況則往往是采用c或c++等性能更好的語言去實作。

此外,python語言本身支援将其他語言(包括c、c++等)通過相關的架構和手段內建到python中,是以在這種情況下也是可以用python作為主要語言去實作所需的總體功

能的。

總結:

python的性能隻是相對弱一些但不差,而且多數情況下都能夠滿足需求,即多數情況下都可以選擇用python去實作自己需要的功能。

當python性能不能滿足要求時,也可以通過采用其他性能更好的如c、c++等語言去實作性能相關部分的功能,然後再內建到python代碼中,這樣保持了python仍然是實作功能的主要語言。

1.3.2 python自身的特點

除了作為解釋型語言的python自帶的優缺點之外,python語言本身也有其自己的特點。此處讨論python特點時,也是和評價其他事物一樣去和其同類語言對比。

python相對其他語言一個最大的特點是:代碼縮進決定了代碼的邏輯關系,而不僅僅是為了代碼的美觀性。

下面介紹更多的其他特點:

很多語言内置特性使得python語言本身很友善程式設計者使用python中的字元串可以直接通過數組下标去獲得對應子字元串。這類特性是其他很多語言本身所不具有的。python的此類特點在第4章中會有更加詳細的解釋。

.一種被廣泛采用的膠水語言

python相對其他語言有很強的粘合能力,其主要指的是python本身支援很多架構和接口,它允許在python和其他很多語言之間互相調用。如為了提高性能等,把與性能相關的部分用性能相對更好的其他語言實作,然後再整合到python中,起到了作為不同語言的“粘合劑”的作用,以此達到提高python程式整體性能的目的。

3.功能豐富的自帶庫以及種類和數量繁多且強大的第三方庫

除了python語言本身自帶的标準庫功能就很豐富、很強大之外,目前還有數量巨大的、各種領域的、功能強大的第三方庫函數。

因為python語言易于使用,是以有越來越多的使用者願意使用和發展python,很多人把在python開發期間積累的庫函數貢獻了出來,如此積累至今,就形成了數量衆多且功能強大的第三方庫函數。

如上特點對于python語言的使用者來說有着顯而易見的好處:當實作很多功能時,往往不需要重複“造輪子”,而可以找到現成的内置python庫或第三方的python庫去幫助我們實作想要的功能,進而節省我們大量的精力。換句話說,在實作一個複雜的功能時,往往變成了找到合适的庫并使用即可,而無需從頭到尾去實作一個很複雜的功能,進而節省了很多寶貴的時間和精力。而與之對應的是,當我們用其他語言實作同樣的功能時,由于缺少好用的庫而需要我們從無到有全新地去實作對應功能所需的代碼。由此即可對比出python更加好用與強大。

例1.1 python庫種類繁多和功能強大的好處

此處用制造汽車來類比解釋python的好處。

假如你需要制造一台汽車,如果使用python去實作的話,你會發現,制造汽車所需要的核心部件,比如發動機、底盤、車架等,都已經有了,即可以直接從python内置的相關功能和第三方庫中找到實作對應功能的子產品。并且實作同一種功能,比如發動機,還有多個子產品可供選擇,而你要做的隻是稍微了解每個子產品各自的優缺點,然後組合和校準之後很快就可以弄出一台汽車了。

與此對應的是,如果用其他語言去實作同樣的功能,則很可能遇到的情況是:如發動機等核心部件沒有現成的可用的子產品,你要自己手動去打造,需要自己去實作對應的代碼,或者即使有現成的但功能也不夠強大,又或者選擇餘地不夠多而沒有找到讓你滿意的,最終還是需要你額外花很多精力去實作。而除了需要自己搞定發動機等核心功能外,還有很多其他功能也需要自己去實作。

這樣,用其他語言從無到有去制造一台汽車的話,可能少則幾周多則幾個月。而用python這種好用的語言的話,很可能是幾天或者一兩周就可以搞定了。

這就是我們所說的python語言功能強大的自帶庫以及種類和數量繁多的第三方庫,綜合而言就是python很強大很好用!

4.适合原型開發

原型開發指的是當有了一個概念或算法之類的東西,為了驗證它的正确性或可行性而去找合适的語言快速實作出來。由于python是腳本語言,且其本身功能豐富,是以特别适用于原型開發。

5.跨平台和可移植性很好

需要首先強調的是,所謂的可移植性其實也是相對的概念,比如java也是個可移植性很好的語言。

簡單地說,可移植性就是對于同樣的代碼可以不經過改動直接拿到其他平台使用,并可以實作同樣的功能。與此相對的其他很多語言,比如c等,更換平台後則很可能還需要改動部分代碼之後程式才可以正常運作,才可以實作同樣的功能。有些語言更換平台後甚至都無法直接運作。比如c#的代碼隻能在windows平台上運作,換個其他系統,比如 linux,基本上就沒法運作沒法使用了。

而python的可移植性是因為不同平台中安裝了python環境,有對應的python解釋器,對于python代碼來說又無需編譯,隻要是個普通的文本檔案就可以直接運作了。其内部實作過程是,python解析器會把代碼解析成可以在目前平台下運作的代碼并運作。

正是由于python語言具有如此多的優點,是以才有越來越多的人去認識和學習python,實作python更廣泛的應用。