如同學習任何一種自然語言比如英語、或者其它編程語言比如匯編(這個我喜歡,可惜多年之后,已經好久沒有用過了)一樣,總要說一說有關這種語言的事情,有的可能就是八卦,越八卦的越容易傳播。當然,以下的所有說法中,難免充滿了自戀,因為你看不到說Python的壞話。這也好理解,如果要挑缺點是比較容易的事情,但是找優點,不管是對人還是對其它事物,都是困難的。這也許是人的劣根之所在吧,喜歡挑別人的刺兒,從而彰顯自己在那方面高于對方。特別是在我們這個麻將文化充斥的神奇地方,更多了。
廢話少說點(已經不少了),進入有關python的話題。
## Python的昨天今天和明天
這個題目有點大了,似乎回顧過去、考察現在、張望未來,都是那些掌握方向的大人物(司機嗎?)做的。那就讓我們每個人都成為大人物吧。因為如果不回顧一下歷史,似乎無法滿足學習者的好奇心;如果不考察一下現在,學習者不放心(擔心學了之后沒有什么用途);如果不張望一下未來,怎么能吸引(也算是一種忽悠吧)學習者或者未來的開發者呢?
## Python的歷史
Python的創始人為吉多·范羅蘇姆(Guido van Rossum)。關于這個人開發這種語言的過程,很多資料里面都要記錄下面的故事:
> > 1989年的圣誕節期間,吉多·范羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,作為ABC語言的一種繼承。之所以選中Python作為程序的名字,是因為他是一個蒙提·派森的飛行馬戲團的愛好者。ABC是由吉多參加設計的一種教學語言。就吉多本人看來,ABC這種語言非常優美和強大,是專門為非專業程序員設計的。但是ABC語言并沒有成功,究其原因,吉多認為是非開放造成的。吉多決心在Python中避免這一錯誤,并取得了非常好的效果,完美結合了C和其他一些語言。
這個故事我是從維基百科里面直接復制過來的,很多講python歷史的資料里面,也都轉載這段。但是,在我來看,這段故事有點忽悠人的味道。其實,上面這段中提到的,吉多為了打發時間而決定開發python的說法,來自他自己的這樣一段自述:
> > Over six years ago, in December 1989, I was looking for a "hobby" programming project that would keep me occupied during the week around Christmas. My office (a government-run research lab in Amsterdam) would be closed, but I had a home computer, and not much else on my hands. I decided to write an interpreter for the new scripting language I had been thinking about lately: a descendant of ABC that would appeal to Unix/C hackers. I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python's Flying Circus).(原文地址:[https://www.python.org/doc/essays/foreword/](https://www.python.org/doc/essays/foreword/))
首先,必須承認,這個哥們兒是一個牛人,非常牛的人。此處獻上我的崇拜。
其次,做為剛剛開始學習python的朋友,可千萬別認為python就是一個隨隨便便就做出來的東西,就是一個牛人一沖動搞出來的東西。人家也是站在巨人的肩膀上的。
第三,牛人在成功之后,往往把奮斗的過程描繪的比較簡單,或者是謙虛?或者是讓人聽起來他更牛?反正,我們看最后結果的時候,很難感受過程中的酸甜苦辣。
不管怎么樣,牛人在那時刻開始創立了python,而且,他更牛的在于具有現代化的思維:開放。通過Python社區,吸引來自世界各地的開發者,參與python的建設。在這里,請讀者一定要聯想到Linux和它的創始人芬蘭人林納斯·托瓦茲。兩者都秉承“開放”思想,得到了來自世界各地開發者和應用者的歡呼和尊敬。也請大家再聯想到另外一個在另外領域秉承開放思想的人——鄧小平先生,他讓一個封閉的破舊老水車有了更新。
請列位多向所有倡導“開放”的牛人們表示敬意,是他們讓這個世界更美好了。他們以行動詮釋了熱力學第二定律——“熵增原理”。
## Python的現在
有一次與某軟件公司一個號稱是CTO的人談話,他問我用什么語言開發,我說用Python,估計是我的英語發音不好吧(我這回真的謙虛了一把),他居然聽成了Pascal(也是一種高級語言,現在很少用了,曾經是比較流行的教學語言)。嗚呼,Python是小眾嗎?不是,是那家伙眼界不開闊!接觸過不少號稱CTO的,多數是有幾年經驗的程序員,并沒有以國際視野來看待技術,當然,大牛的CTO還是不少的。總之,不要被外表忽悠了,“不看廣告,看療效”。
首先看一張最近一期的編程語言排行
[](https://github.com/qiwsir/ITArticles/blob/master/Pictures/python1.png)
python在這個榜單中第8,也許看官心理在想:為什么我不去學那個排第一呢?如果您是一個零基礎的學習者,我以多年的工作和教學經驗正告:還是從入門比較容易的開始吧,python是這樣的。等以后,完全可以拓展到其它語言。或許你又問了,php和vb是不是可以呢?他們排名比python靠前。回答是:當然可以。但是,學習一種入門的語言,要多方考慮,或許以后你就不想學別的,想用這個包打天下了,那就只有python。并且,還得看下面的信息:
> > 根據Dice.com一項網上對20000名IT專業人士進行調查的結果 : java類平均工資:91060美元; python類平均工資:90208美元;
不錯,python程序員平均來講,比java平均工資低,但看看差距,再看看兩者的入門門檻,就知道,學習python絕對是一個性價比非常高的投資啦。
Python就是這樣,默默地拓展著它的領域。
## Python的未來
未來,要靠列位來做了,你學好了,用好了,未來它就光明了。它的未來在你手里。
## Python的特點
很多高級語言都宣稱自己是簡單的、入門容易的,并且具有普適性的。真正做到這些的,不忽悠的,只有Python。有朋友做了一件襯衫,上面寫著“生命有限,我用Python”,這說明什么?它有著簡單、開發速度快,節省時間和精力的特點。因為它是開放的,有很多可愛的開發者(為開放社區做貢獻的開發者,是最可愛的人),將常用的功能做好了,放在網上,誰都可以拿過來使用。這就是Python,這就是開放。
抄一段嚴格的描述,來自維基百科:
> > Python是完全面向對象的語言。函數、模塊、數字、字符串都是對象。并且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復用性。Python支持重載運算符,因此Python也支持泛型設計。相對于Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標準庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。
> >
> > 雖然Python可能被粗略地分類為“腳本語言”(script language),但實際上一些大規模軟件開發項目例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級動態編程語言,原因是“腳本語言”泛指僅作簡單程序設計任務的語言,如shell script、VBScript等只能處理簡單任務的編程語言,并不能與Python相提并論。
> >
> > Python本身被設計為可擴充的。并非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C、C++、Cython來編寫擴充模塊。Python編譯器本身也可以被集成到其它需要腳本語言的程序內。因此,很多人還把Python作為一種“膠水語言”(glue language)使用。使用Python將其他語言編寫的程序進行集成和封裝。在Google內部的很多項目,例如Google Engine使用C++編寫性能要求極高的部分,然后用Python或Java/Go調用相應的模塊。《Python技術手冊》的作者馬特利(Alex Martelli)說:“這很難講,不過,2004年,Python已在Google內部使用,Google召募許多Python高手,但在這之前就已決定使用Python。他們的目的是盡量使用Python,在不得已時改用C++;在操控硬件的場合使用C++,在快速開發時候使用Python。”
可能里面有一些術語還不是很理解,沒關系,只要明白:Python是一種很牛的語言,應用簡單,功能強大,google都在使用。這就足夠了,足夠讓你下決心學習了。
## python哲學
Python之所以與眾不同,還在于它強調一種哲學理念,用黑字表示強調吧:
**Python的設計哲學是“優雅”、“明確”、“簡單”。**
Python開發者的哲學是“用一種方法,最好是只有一種方法來做一件事。在設計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!
~~~
上面的詩來自[Python官方](http://legacy.python.org/dev/peps/pep-0020/),已經把前面嘮叨的東西做了精美的概括。有中譯本,[看這里](https://wiki.python.org/moin/PythonZenChineseTranslate),本文摘抄一種中文翻譯:
~~~
優美勝于丑陋,明晰勝于隱晦
簡單勝于復雜,復雜勝于繁蕪
扁平勝于嵌套,稀疏勝于密集
可讀性很重要。
雖然實用性比純粹性更重要,
但特例并不足以把規則破壞掉。
錯誤狀態永遠不要忽略,
除非你明確地保持沉默,
直面多義,永不臆斷。
最佳的途徑只有一條,然而他并非顯而易見————誰叫你不是荷蘭人?
置之不理或許會比慌忙應對要好,
然而現在動手遠比束手無策更好。
難以解讀的實現不會是個好主意,
容易解讀的或許才是。
名字空間就是個頂呱呱好的主意。
讓我們想出更多的好主意!
~~~
## 準備
已經描述了python的美好,開始學啦,做好如下準備:
* 電腦,必須的。不管是什么操作系統。
* 上網,必須的。沒有為什么。
除了這些,還有一條,非常非常重要,寫在最后:**這是自己的興趣。**
- 第零部分 獨上高樓,望盡天涯路
- 嘮叨一些關于Python的事情
- 為什么要開設本欄目
- 第一部分 積小流,至江海
- Python環境安裝
- 集成開發環境(IDE)
- 數的類型和四則運算
- 啰嗦的除法
- 開始真正編程
- 初識永遠強大的函數
- 玩轉字符串(1):基本概念、字符轉義、字符串連接、變量與字符串關系
- 玩轉字符串(2)
- 玩轉字符串(3)
- 眼花繚亂的運算符
- 從if開始語句的征程
- 一個免費的實驗室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比較
- 畫圈還不簡單嗎
- 再深點,更懂list
- 字典,你還記得嗎?
- 字典的操作方法
- 有點簡約的元組
- 一二三,集合了
- 集合的關系
- Python數據類型總結
- 深入變量和引用對象
- 賦值,簡單也不簡單
- 坑爹的字符編碼
- 做一個小游戲
- 不要紅頭文件(1): open, write, close
- 不要紅頭文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 窮千里目,上一層樓
- 正規地說一句話
- print能干的事情
- 從格式化表達式到方法
- 復習if語句
- 用while來循環
- 難以想象的for
- 關于循環的小伎倆
- 讓人歡喜讓人憂的迭代
- 大話題小函數(1)
- 大話題小函數(2)
- python文檔
- 重回函數
- 變量和參數
- 總結參數的傳遞
- 傳說中的函數條規
- 關于類的基本認識
- 編寫類之一創建實例
- 編寫類之二方法
- 編寫類之三子類
- 編寫類之四再論繼承
- 命名空間
- 類的細節
- Import 模塊
- 模塊的加載
- 私有和專有
- 折騰一下目錄: os.path.<attribute>
- 第三部分 昨夜西風,亭臺誰登
- 網站的結構:網站組成、MySQL數據庫的安裝和配置、MySQL的運行
- 通過Python連接數據庫:安裝python-MySQLdb,連接MySQL
- 用Pyton操作數據庫(1):建立連接和游標,并insert and commit
- 用Python操作數據庫(2)
- 用Python操作數據庫(3)
- python開發框架:框架介紹、Tornado安裝
- Hello,第一個網頁分析:tornado網站的基本結構剖析:improt模塊、RequestHandler, HTTPServer, Application, IOLoop
- 實例分析get和post:get()通過URL得到數據和post()通過get_argument()獲取數據
- 問候世界:利用GAE建立tornado框架網站
- 使用表單和模板:tornado模板self.render和模板變量傳遞
- 模板中的語法:tornado模板中的for,if,set等語法
- 靜態文件以及一個項目框架
- 模板轉義
- 第四部分 暮然回首,燈火闌珊處
- requests庫
- 比較json/dictionary的庫
- defaultdict 模塊和 namedtuple 模塊
- 第五部分 Python備忘錄
- 基本的(字面量)值
- 運算符
- 常用的內建函數
- 擴展閱讀(來自網絡文章)
- 人生苦短,我用Python