為什麼很多人喜歡 Python?


我認為我是非常有資格回答這個問題的,Python從根本上改變了我的人生。我幾個月前寫了一篇博客,從E.E到S.E | {Kingname},現在把它貼上來:

我在本科學的是Electric Engineering,大四找工作卻當了軟體工程師。這可以說是各種機緣巧合吧。


我接觸編程是在初中,那個時候有同學在看《黑客X檔案》,當時看到一篇文章說的一個萬能密碼:

"or""="

有一天在學校的網站論壇上測試了一下,發現真的登錄了,而且是管理員的身份。雖然不知道是什麼原理,但是覺得有點意思。


後來開始不間斷的買《黑客X檔案》,接觸到了編程,VB,C語言,Perl還有彙編。我發現VB特別好懂,於是安裝了一個Visual Basic 6.0開始寫小程序。我寫的最大的小程序就是一個網頁瀏覽器了,當然是跟著書上寫的。這些經歷現在想想也挺豐富的,入侵網站,抓取肉雞。不過這不是今天的重點,以後單獨寫一篇文章吧。


開始上大學了,第一學期就是C語言。周圍無數的傳言說C語言難得跟一坨屎一樣,掛科一大半。直到現在,這四年間,每一年都能聽到無數這樣的話語。然而當年的C語言考試,我提前40分鐘做完,不小心拿了一個滿分。

那個時候用的是譚浩強的C語言,被人吐槽無數的版本。裡面有些東西確實腦殘:

b = a+++++a;

這樣的問題確實沒有什麼意義,考試的題裡面,概念題就能讓你及格。剩下的改錯題和編程題稍稍考一點水平,然而題目大多也是課程設計做過的。這一門課程,我的課程設計所有程序都是我自己憑腦袋想出來的,即便書上有現成代碼的演算法,我也是自己根據對演算法的理解寫出來的。而其他人有些照著書寫代碼,有些直接copy。這應該就是原因吧。


大學前三年,斷斷續續的搞了一些php, Java,LaTex 但是都堅持不長時間。這也和我三分鐘的熱情有關。一次偶然的機會,聽到了一個語言,Python,網上搜索了一下,看到很多人說用它寫爬蟲很方便。那個時候我學到了一個詞,爬蟲。


今年三月份,Coursera上面開了一門課程,是Python入門。課程持續到5月份,每周課程都會有miniProject,一般來說是做小遊戲。在完成每一個小項目的過程中,我發現我越來越喜歡Python。


5月份Python課程結束沒多久,我收到教務處的通知,周五要提交創新項目的結題報告。我才反應我過來,我去年申請的一個創新訓練項目還沒有做。


這個項目是做一個選課輔助軟體。當時申請表中,我表示準備用MFC與MSSQL製作這個軟體和對應的資料庫。可是,MSSQL安裝好以後,我的電腦開機要5分鐘。而MFC,倒騰了半個月,一點進展都沒有,遂從此荒廢。


時間只有一個星期,現學MFC是來不及了。這個時候我想到我是會Python的人,於是果斷決定使用Python + MySQL來開發這個選課輔助軟體。


一天半以後,軟體連同圖形界面全部做好了。那個時候,我覺得Python必定是神派來拯救我的天使。


後來輔導員做微信公眾號,我提議我可以做一個爬蟲,把教務處的通知扒取下來。那天以後,我正式開始做爬蟲。


一開始是用Python的一個庫urllib2的一個方法獲取一個網頁的全部代碼,然互寫入本地保存。這就是一個最簡單的爬蟲了。

接下來接觸了正則表達式。於是一個真正意義的爬蟲誕生了。那個時候我室友過生日,我給他寫了一個扒取兒(cheng)童(ren)網站裡面賣肉漫畫的爬蟲。他高興得不得了。關於這個爬蟲,有機會我應該會放出來吧。不過擔心被查水表。


然後我覺得我有點了不起了,於是去淘寶開了一個店鋪,專業定做Python爬蟲。一個月都沒有生意,直到有一天來了一個買家。他讓我做百度貼吧的爬蟲,於是我寫了一個原始爬蟲的demo給他,然後正式接手這個工作。他讓他的一個下屬教我Scrapy,這個爬蟲框架讓我的生產效率提升了一個數量級。接下來扒取各大視頻網站,又指導我使用Scrapy配合Redis製作分散式爬蟲,然後把數據存入MongoDB中,這樣我的生產效率再一次提升了幾個數量級。


這樣我賺取到了給自己買iPad的錢。這也奠定了我學習軟體方面技術的基本方法,項目驅動,現學現用。在後面接到的項目中,無論是爬蟲的模擬登陸,打碼,多代理,甚至是自然語言處理,多次證實了我這個方法的正確性。


從大學入學開始,我就決定要出國。可是最後TOEFL只差2分讓我與資本主義國家失之交臂。一氣之下決定考研。


大三下期和整個暑假都在準備考研,但是考研課程老師那種賣狗皮膏藥十全大補丸的樣子確實讓我厭煩,考研數學題做起來也甚是噁心。後來因為一些私事,我放棄了考研,中秋節過後開始準備找工作。


那個時候,BAT和華為的提前批招聘都結束了。而我想都不敢想華為,因為印象中,華為是招硬體的,而且基本上都是研究生。我是學E.E的,但是我的項目經歷只有學校的各種實驗課做的東西。於是我抱著試一試的心態去應聘華為的軟體工程師。


我不得不感謝Python,他讓我幾乎是毫無阻力的通過了大多數公司的面試,我的所有拿得出手的項目經歷,全部都有Python的身影。最後我去了MTK而拒了華為,畢竟華為太累了。在兩個月之前,我都不敢想我竟然有機會拒絕華為。


這樣我就成了一個程序員。本科學的東西我想我還是有點用的,作為一個終身愛好也不錯。畢竟搞硬體的要表白,場面炫目到秒殺碼農幾條街。


如果沒有Python,我想我現在不知道在幹嘛。他讓我的人生從此不同。


2005年中期,用了幾天學完了Python,隨後兩天用了十幾個小時寫了編譯原理的課程設計,這是我大學階段所有課程設計里唯一沒有延期的。

後來逐漸發現Python的簡單可以把我的思想從編程語言的細節里解放出來,更關注實際要解決的問題。

就喜歡上了。

既然有人點贊,就再補充點。

很多人關注起Python就是因為簡單易懂,做Web很方便。但在深入CS學科的很多高級主題時,Python能發揮出更加強大無比的力量。而這來自於Python是個好膠水。

坦白講,Python不算最好的膠水,至少Lua做膠水就比Python好,API好用。但Python再算上強大的標準庫、數據結構、友好的轉義後,就脫穎而出了。

在科學計算領域,NumPy和SciPy的存在解放了很多人的思想束縛。其底層C模塊,性能一流。

而當你需要一流的性能與一流的可調試性時,Python C模塊是最好的選擇。封裝雖然有些麻煩,但封裝後可以在Python里調用實在太方便。一些已有的C/C++應用也可以通過將函數封裝給Python調用,而極大的降低調試難度,提升單元測試覆蓋率。

2007年時我開始學Python的C模塊編程,並在博客中放出了我的筆記。那時寫了不少東西。封裝libpcap後,做網路抓包,通信劫持,使得別人眼裡,我儼然是個正經黑客。後來迷戀erlang期間,做了C node的Python封裝,使得Python與Erlang可以互發消息,組建集群。搞硬體開發期間,封裝了Cubieboard和RaspberryPi的GPIO、SPI等眾多外設的Python介面,調試速度快到了雲邊。做USB通信期間,因為PyUSB不支持isochronous通信而自己重寫了個libusb的Python封裝,使得USB編程不再困難。做音視頻識別的日子裡,做了v4l2的Python封裝,使得操作攝像頭的控制精度達到了最高。

相比於其他人,用上這些Python封裝後,迭代速度數十倍的提高帶來了系統進化速度的極大提高。比如我在音視頻識別的研究期間,因為NumPy和我自己的封裝,每天動則十幾次甚至幾十次的迭代,優化演算法的各種參數。使得我在不到兩年時間裡,識別效果就超過可某大學教授12年的研究成果。識別速度更是超出對方兩個數量級。

對於各個領域的研究者,我是真心推薦Python的。用上NumPy和SciPy,你就擁有了極致的性能,頂級的可調式性,和產品級的穩定性。而這也使得Python的這套組合成為科學計算領域唯一能與matlab競爭的選擇。

過200贊我就專門寫一篇文章介紹用Python做科學計算的幾個實例。

居然一個多小時就過200贊了。我的博客地址在 http://gashero.iteye.com/ ,我會用大約一周來寫,寫完後會把地址貼到這裡。感謝大家的厚愛。

人生苦短,快用Python!


我就發圖,不說話 ;)


小平同志說:"社會主義的本質是解放生產力",而Python就是一門可以解放程序員生產力的語言。

Python簡單,所以學起來快,有編程經驗的程序員一周就能上手Python。

Python強大,Python能做的事情從Web開發、科學計算、機器學習、數據分析挖掘、量化交易、網路爬蟲,大到航空項目,真不是在催牛

Python庫多,沒有哪一門語言的第三方庫比得上Python,各種領域的庫都有,你無需再把時間浪費在造輪子上。

Python表達能力強,沒有拖泥帶水,有自己的Pythonic編程風格,所以開發效率高。

Python免費,任何人、組織、機構都可以免費使用Python,不像Java那麼商業化,這也是為什麼Google還要和Oracle糾纏不清打官司的原因。

--------------分割線--------------------

有人說,Python慢,who care? 用C來解決真正的性能問題

有人說,Python不適合大項目,Instagram、Youtube不夠大?那是因為視野不夠大

有人說,Python是弱類型語言,我想你要表達的是它是動態語言

有人說,Python太分裂,python2、python3、(python4?),python提供了six做兼容,任何有歷史的語言都躲不過兼容問題,因為世界變化太快。


數值分析中沒有幾個可選的,Python 是數值分析中最不噁心的之一。之所以是最不噁心的之一而不是第二不噁心的之一是因為其包多而且很多包介面友好


雖然我在數值分析中長期用 Julia,但是 Julia 用的爽必須能夠熟練地調用 Python 包


除去強制性的要求語法縮進很討厭之外,最喜歡Python的地方可以概括為:招之即來,來則能戰.

目前基本上還沒有看到Python不能做的事情(當然做的怎麼樣另說),可以說Python就是我接觸過的語言裡面最像瑞士軍刀的,遇到什麼問題拿出來總能發現有可用的工具.
再加上平滑的學習曲線,幾乎是能馬上上手,於是實在不得不在自己的技能樹上給這門語言留下一席之地了。


The Zen of Python

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren"t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you"re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it"s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let"s do more of those!


有一道CF的div2的A題,我用cpp寫了一篇有幾十行的樣子,隨手翻了一下島娘(xiaodao)的代碼,Python,五行。

瞬間整個人就不好了。從此喜歡上了Python和島娘。。。

島姐姐最棒了。。。


破戒答題。。。答完繼續閉關去。。。
我喜歡python但不是因為優雅簡單純粹之類的。實際上,作為開發語言,我是更喜歡ruby的,作為學慣用的語言,我也更欣賞lisp和haskell。
那我為啥還喜歡python呢?因為這貨就是我的啟蒙老師啊!!!學編譯原理之後,我就是看著python的源碼開始研究現代語言的。我現在還記得每當看懂一個複雜結構時的興奮,真的是想飛起來的感覺。借著python的實現,我明白了許多課上不會講的東西,也讓我下定決心踏進編程語言這個領域。
而最近,又是研究pypy把我帶進了jit的殿堂。之前我一直惦記著實現個jit,可是寫這個真的太難了。但pypy卻用一種獨特的手段,展示了許多jit中有趣的技巧。而且pypy用的rpython,對於寫編譯器、解釋器來說真是一個利器!而且rpython本身實現里就有許多值得稱道的東西。
在我眼裡,python並不是一個完美的語言。但它對我來說,就是一個完美的老師。所以,即使未來會有許多比python好的語言出現,我也仍然不會放棄喜歡它。
==========================================================================
答完才發現題目是為啥很多人喜歡python。。。
好吧,我這些絕對是小眾的不能更小眾的理由了。。。
繼續閉關去了。。。


看到了這個答案為什麼很多人喜歡 Python? - Alan Snape 的回答。。。
表示5行就能秒掉的div2-A還是比較常見的,畢竟div2-A是比賽中最簡單的題。。。
所以我找了個3行就能秒掉的div1-C。。。
Submission #7878473


因為軟體工程發展到今天,很多時候代碼的可讀性,開發的速度,後期的維護難度,已經成為了語言最大的價值之一。還有很重要的一點就是,比起其它語言,要寫很爛很爛的python,還是比較難的。
- Python和自然語言十分相近: 編寫容易,維護容易,開發迅速
- 語言本身力量強大且高效:開發迅速,編寫容易
- 有多種多樣第三方庫,各種直譯器:開發迅速,編寫容易, 效率不低
- 有一定群眾基礎和編寫標準(pep8 etc):開發迅速,debug容易,社區支持


因為巧合地學了這個,並發現好用,沒那麼多理由。

每種語言,好用,用好即可。


因為大多數人寫的系統都不夠複雜,也不需要很高的復用性,也不需要很高的性能。

沒事,我也挺喜歡Python的,不過現在在等matplotlib給我生成eps反正沒事幹來潑潑知乎Python萬能的冷水~~

可視代碼少真不等於程序簡潔/優雅/開發效率高。。。

你們來咬我呀~嗷~~~

說回來,Python真正的好處就是類庫豐富而已。。。


我們研究組是做量子化學的,組裡三四個人曾經在一次hackathon上用三天時間用python寫了一個EOM coupled cluster (一種計算方法) 的程序,過去通常會花一個博士生兩年左右的時間

對於運算速度的話,可以直接通過numpy調用blas/lapack等數學庫,或者在開發完成後把最耗時的部分改成C的函數,基本就夠用了

可以感受一下,下面每個圖大致相當於一個張量方程,這只是整個程序中的其中一部分


import antigravity
"I am flying"


Python很直觀,結合了不同的編程範式,有強大的數值計算和自然語言處理庫。


上手快, 但是深入之後又能發現很多新東西。

作為非計算機專業的小白, Python 提供了一些好玩的『新』思想, 比如說自動垃圾回收, 指針式的變數定義, 還有metaprogramming, 類定義也特么是是一個可以隨便改的實例。對於只學過C,Fortran的小白來說, 這些東西都挺新奇的。

當然從零開始每天一個小時七天編出一個控制串口簡訊貓的小程序什麼的也是方便的很。


  • 簡單、易學
  • 開源
  • 面向對象
  • 應用領域廣泛
  • 豐富的系統及第三方庫
  • 開發效率非常高
  • 內置數據結構豐富且易用
  • 代碼可讀性強(比較讀代碼比寫代碼的時間多)

這也是我完全不理解的事情...

按說怎麼也得是ruby啊. (逃


一張圖帶你看清所有語言的奧秘, 之所以那麼多人喜歡, 我覺得最開始那句話解釋的簡單:

I don"t know, just pick one for me

問: 我想學編程
答: 想學哪門編程語言?
問: 不知道啊
答: 那學Python吧

下面的難易度評級, 一顆星也是醉了


推薦閱讀:

你最痛苦的一次找程序 bug 的經歷是哪次?
怎麼將 Android 程序做成插件化的形式?
30 歲才開始學習編程靠譜嗎?
2013 年 7 月的 Struts2 漏洞實際帶來多大影響?
為什麼寫程序的時候可以堅持很久,但是學習數學就很難保持注意力?

TAG:Python | 編程 | 生活方式 | 計算機語言 | 編程語言比較 |