python作為腳本語言和c/c++ 等語言的優勢和劣勢在哪裡地方?python比較成熟用途在哪裡方面?

python, c/c , 優勢, 劣勢


從理想上看,Python和C++是十分相似的,它們都想做萬金油。

C++是學術性的,大牛們都指著靠它揚名立萬,設計哲學是『什麼都想要』,首先要兼容C要快,其次是別的語言有的咱都要有,別的語言沒有的咱也要有。但是一方面C語言本身也不是很完善(比如頭文件這樣的粗暴的機制),另一方面為了運行時的爽快把新功能的臟活累活全往預處理、編譯上扔,導致C++的晦澀、艱深。用C++寫代碼有點像是用文言文寫公文,逼格滿滿,文采飛揚,需要耗費大量的精力在內容以外的地方。而看文言文公文(C++代碼)更是痛苦,首先你得熟悉各種反人類的語法(傳值/傳址/move語義、預處理、函數指針……),通曉歷代典故(effective C++, ……)

Python的想法不一樣,Python的核心是簡潔直接清晰,Python認為最好的方式只有一種,它也只呈現那最好的一面。Python的語法本身就是一種偽代碼的最佳實踐,而且這個『偽代碼』還是可以運行的。這造就了Python較低的使用門檻和極高的編程效率。用Python開發只要『有事兒說事兒』就好。ruby on rails最火的那幾年,有人問guido叔(Python作者)怎麼看,guido說的大概是:Python不需要殺手級應用,因為如果是這樣的話,Python在其它方面的作用就被忽略了。

python最大的問題在於性能。性能問題其實是在設計時最容易被誤解的部分。C++以『接近C語言的性能』橫行多年。隨著物理硬體性能的顯著提升以及軟體複雜性的顯著提升,人們開始對性能有了更正確的看法。

首先,有些時候性能並不重要。IO密集型的業務大部分時間都在等待IO,節省不到1ms讓開發量增加幾倍似乎不是很划得來。

其次,有些時候程序員的效率比機器的效率更重要。對於很多複雜的邏輯性功能,使用更加清晰的語言比晦澀的語言給程序減少的負擔,可以大大增強軟體的質量。(尤其是公司給的待遇招不到知乎上的大牛程序員的時候)

於是,Python/Ruby/Java開始崛起了。用Python的『inside battery』就可以做到過去需要反覆造輪子、天天加班還做得不是那麼好的東西。我在看Python的源代碼時,突然有一種感覺:Python底層的源代碼其實可以理解為C語言的一些常用功能的庫(如hashmap實現的dict),Python進程就是載入了這些庫然後讀取配置文件(Python代碼)執行相應的邏輯。相同的功能,Python進行了一次轉義,肯定會比直接用C實現要慢,但你不一定能這麼快的寫出這樣運行比Python快的C代碼。(當然,知乎上的大牛還是除外)

於是,類似Python這樣的語言們解放了程序員的時間,程序員們寂寞難耐的夜晚可以有了更多的產出,一個一個的項目建立起來了,社區建立起來了,遲滯的市場也開始有感知了。

即便這樣,Python還有會心一擊:我也可以不那麼慢。Python可以十分方便地和C代碼融合到一起。Python和C的組合徹底解決了後顧之憂:先用Python快速開發快速搭建產品原型,然後找出性能瓶頸有針對性的性能優化。所謂好鋼用在刀刃上,節約時間,節省成本,減少風險,提高程序員的生活品質又有什麼不對呢?


Python 是腳本語言,也就是中間件語言,其內核仍然是純 c 的性能表達的,而主要性能消耗在腳本的實時編譯上。

而對比c,同樣的功能,python可以表達比c更加精鍊,當然犧牲了一些性能。

如果確實對某個模組性能不滿意,還可以使用 c 編寫 Python 模塊為其加速。

面對一些並不需要過多性能而可以獲得更快捷的開發速度,Python的優勢完全可以蓋過「劣勢」。

可以說,Python基本完美。

例如知乎就是使用 Python 製作的。

Google 的許多頁面也是使用 Python 進行渲染的。


簡單來說,Python寫得快但是跑的慢,不過隨著發展跑的也越來越快了。C++寫得慢但是跑得快,但是隨著新版本的C++發布,C++寫起來也越來越快了。

Python可以用來做性能不敏感的項目,或者快速實現一個項目的結構,根據二八原則,利用C或者C++來對20%的部分進行優化,這樣可以在開發速度和運行速度中找一個很好的平衡點(Python跟C的交互還是很容易的,因為Python本質上就是C)。

所以C或者C++程序員學一個Python絕對有用。


C is very efficient. Unfortunately, C gets that efficiency by requiring you to do a lot of low-level management of resources.

With today"s machines as powerful as they are, this is usually a bad tradeoff -- it"s smarter to use a language that uses the machine"s time less efficiently, but your time much more efficiently.

Thus, Python.

--Eric Raymond, October 1996


Python最大的優勢:

1)最好的學習語言,語法最簡潔,基本環境小巧靈活。令人一見就喜歡的編程語言,靠顏值就越來越受歡迎。

2)開發效率極高。

3)最大的優勢在於,可以作為一種強大的輔助語言。

4)實用性方面,目前主要做自動化腳本、網站、爬蟲等。

5)開放性的社區,大量參考源碼和增強框架。開發網站、桌面、遊戲都有眾多方案。

插圖:蘋果發布會上展示Swift比Python快220倍 來源:官方視頻

Python最大的劣勢:

1)最大的劣勢也在於,大部分場景下只能做輔助語言。

2)運行效率極低。運算性能比主流語言慢兩個數量級,比C++慢200倍以上(參見下表無缺草的測試)。並且在蘋果Swift發布會上成為反面教材(參見插圖)。即使編譯後依然較慢。(知乎經常停止響應是否與此有關?)

3)商業化開發方面,開發桌面、遊戲的方案都只是玩具級的。無論應用廣度、框架成熟度、性能,與主流的Java、C#、Swift還是差距甚遠。


就我個人來講,python最大的優勢是適合寫「一次性代碼」。這裡「一次性代碼」指的是那種有的時候你為了完成某個任務而寫的代碼,這段代碼在完成任務以後就沒啥用了。一次性代碼往往比較簡單,對運行效率要求沒有那麼高,但是對是簡單快捷要求很高。


簡單說一下Python的優勢:

1、程序框架簡單

相對於傳統的 C 和 C++ 語言,Python 提供了豐富多樣的數據結構,並精簡了許多冗長的部分。在

C 和 C++ 中,數據的處理往往採用數組或鏈表的方式,但數組只能存儲同一類型的變數 ;鏈表雖然儲存的內容可變,但結構死板,插入刪除等操作都需遍歷列表,可以說極其不方便。針對這點 Python 提供了豐富的數據結構,包括列表、元組、字典,以及 Numpy 拓展包提供的數組、Pandas 拓展包提供的Data Frame 等。這些數據類型各有特點,可以極大地減少程序的篇幅,使邏輯更加清晰,提高可讀性。

2、功能強大

由於Python是一款免費、開源的編程語言,許多優秀的開發者為Python開發了無數功能強大的擴展包,是所有需要的人都能免費使用,極大的節省了開發時間。

3、可擴展性

Python語言的底層是C和C++寫的,但Python的強大之處在於程序中某型關鍵且運算量巨大的模塊,設計者可以運用C和C++編寫,並在Python中直接調用。這樣可以極大的提高運行速度,同時還不影響程序的完整性。

4、易讀、易維護性

由於上述優點,Python語言編寫的程序先對其他語言來說更加簡潔美觀,思路也更加清晰。這就使得程序的易讀性大大提高,維護成本也大大降低。

【作者】 丁軍燕


優勢: 易讀/易維護, 易擴展,高質量模塊眾多, 原型和生產均不錯,

劣勢: 動態語言難以靜態檢查, C/S軟體源碼易反編譯


曾傑說的很明白了,不過還可以參閱Mark Lutz的《Learning Python》的前幾章



庫函數強大,性能弱


推薦閱讀:

什麼樣的 Python 編輯器比較適合新手?
計算化學,有python基礎還有必要學習matlab么?
如何看待通過《笨辦法學Python》入門編程的行為?
有關python3的multiprocessing.Pool.map問題,發生錯誤??
動態類型的語言的優缺點有哪些?

TAG:Python | C編程語言 | 腳本語言 |