人生苦短,我用Python
什么是Python?
編程開發(fā)語言有很多種,通常大家把開發(fā)語言劃分為靜態(tài)編譯和動態(tài)解析語言,靜態(tài)編譯語言有我們常見的c,c++等,動態(tài)解析語言有我們常見的python,php等。靜態(tài)編譯語言其中一個明顯的特征是:需要對源代碼進行編譯成可執(zhí)行的二進制代碼,變量需要定義成明確的類型;動態(tài)解析語言的特征是:代碼由解析器進行解析并執(zhí)行,變量類型可以在運行時動態(tài)定義。
目前也有很多動態(tài)解析語言可以編譯成二進制代碼方式運行以提高效率,減少了因為解析器解析后執(zhí)行帶來的性能損失。語言之爭一直是大家爭論的問題,也是一個敏感的話題,本文的目的不在于給大家洗腦說明python是最好的語言,世上本沒有最好的語言,只有最合適的語言和最好的程序員。本文只是通過介紹python,讓大家認識到這門語言的優(yōu)點,以及在工作生活中如何利用python解決問題。
Python可以做什么?
如果把開發(fā)按照層次劃分的話,可以分成系統(tǒng)開發(fā)(主要是一些系統(tǒng)性功能的,比如網(wǎng)絡服務,文件服務,系統(tǒng)調(diào)用等);業(yè)務邏輯開發(fā)(主要是一些業(yè)務邏輯的,比如計費,財務,權(quán)限等具體跟操作系統(tǒng)或者底層關(guān)系不大的)。python無論在系統(tǒng)開發(fā)還是業(yè)務開發(fā)方面,都能夠很好地滿足開發(fā)者的需求,幫助開發(fā)者順利完成任務,這不僅得益于python語言本身的特性,還有賴于豐富的官方和第三方模塊庫。
我們可以看一下python常見的模塊
- webpy模塊,用它只需要幾行代碼就可以實現(xiàn)一個web服務器
- SocketServer模塊,用它可以很方便地開發(fā)自己的tcp,udp服務器
- subprocess模塊,用它可以創(chuàng)建和管理進程
- threading模塊,用它可以創(chuàng)建和管理多線程
- queue模塊,是一個線程安全的隊列
- son模塊,這個一看就知道是用來處理json數(shù)據(jù)的了
- logging模塊,這是一個日志模塊
- shutil模塊,這是一個文件管理模塊,包含了文件的基本操作
- urllib模塊,是一個http的常用模塊
- 還有很多很多標準和非標準的模塊,只有你想不到
為了更好地管理python模塊,python還有專門的模塊管理工具,像centos的yum那樣可以查找,安裝需要的模塊,python包管理工具最常見的有pip,關(guān)于查找,安裝,使用模塊,我們會在以后的python系列文章講述。
Python做了什么?
了解了python可以做一些什么之后,那大家會問在實際工作中,有那些東西是用python寫的,下面我會大家介紹一些比較出名的用python寫的項目,以增加大家對python的信心及前途。
- BitTorrent,知名BT下載軟件
- OpenStack,開源云平臺框架
- Yum,CentOS的包管理工具
- google內(nèi)外部大量服務使用python開發(fā),如gmail,earth,maps等
- 豆瓣,國內(nèi)出名的社區(qū),python是豆瓣的主要開發(fā)語言
為什么要學Python?
看了以上兩點之后,我覺得還不足以打動大家去學習python,下面這節(jié)就講述為什么要學python,以及那些人適用python。
人生苦短我用Python
下面我們一直會圍繞這句話來開展討論的內(nèi)容,假如你是一個有老婆,孩子的開發(fā)人員(你老婆很漂亮,你孩子很可愛,這個很關(guān)鍵,再記住你是有老婆,孩子的人了),周五快下班了,你約了老婆孩子去一家很難預約的餐廳吃飯,突然接到老板的任務,要你去做一個小程序,大概功能就是掃描服務器指定目錄下(這個目錄下面還有子目錄)的文件,并檢查文件開頭1KB內(nèi)容里面是否包含了某些關(guān)鍵字,如果包含則把這個文件刪除。老板說這個很緊急,因為服務器磁盤撐爆了,必須要刪除文件才行,但是距離下班只有不到30分鐘了。
作為一個c,c++開發(fā)人員,你要考慮是用遞歸呢還是非遞歸來枚舉文件夾下面的文件,枚舉完了,你還要分配個內(nèi)存讀取文件開頭的1KB內(nèi)容,還要研究字符串查找匹配的算法,別忘了,搞完之后要釋放內(nèi)存,關(guān)閉文件句柄,結(jié)果寫之前花了不少時間構(gòu)思,寫完了,又花了不少時間調(diào)試,還不包含是否出現(xiàn)內(nèi)存越界等導致程序崩潰的bug,結(jié)果要加班,不能陪老婆孩子去吃飯了。
作為一個java開發(fā)人員,你比較幸福,少了c,c++的內(nèi)存泄露,忘記關(guān)閉句柄的煩惱,不過你還需要想想這里面有多少個可以抽象成類的東西,接口怎么設計,找找java有沒有現(xiàn)成的包可以用,然后折騰一下編譯java項目,然后調(diào)試,結(jié)果你可能只需要加班一點點時間就能趕住配老婆孩子吃飯了。
作為一個python開發(fā)人員,我知道枚舉文件夾目錄下的文件可以用os模塊里面的listdir函數(shù),返回一個list列表,用open打開文件然后直接read數(shù)據(jù),用字符串find函數(shù)可以找是否有匹配的關(guān)鍵字,別忘了python還有一個with功能,我with open文件之后我就不用管后面的異常和是否關(guān)閉文件句柄了,with會幫我擦屁股,最后調(diào)用os模塊的remove函數(shù)刪除文件就可以了。最后,這位python開發(fā)人員準時完成任務下班配老婆孩子吃飯并得到老板的稱贊。
以上純粹YY,不過從這樣一個YY的故事可以側(cè)面反映出一種現(xiàn)象,很多東西,我們可以用比較簡單快捷的python來完成任務,沒有必要動不動就用c,c++這些語言。人生的時間很寶貴,應該把時間浪費在美好的事情上面,python有很多現(xiàn)成官方,第三方的庫,都是平時大家在工作中提煉出來,都是復用性很高而且很穩(wěn)定的,再加上python本身的特性可以免去比如c,c++的一些蹩腳的地方,比如容器,字符串操作等容易出現(xiàn)泄漏,越界的問題。最后,這個故事沒有黑c,c++,java語言的意思,每一種語言都有各自擅長的地方,但是我們應該多學習一種順手方便的語言,來解決一些小問題,小事情,把有限的精力花在重要的地方去。
python既可以完成大的項目也可以完成小任務,所以無論是開發(fā)人員,還是運維人員,都可以用python來解決工作中的大大小小問題,同時許多API或者庫對python支持都非常良好,特別是一些本身就用python寫的庫,原生就支持python接口的。
怎么學Python?
講了這么多,這里先簡單概要說一下怎么學python,其實也簡單,無論學什么語言無非就是多練手,多寫代碼,多看別人的代碼。以后的python系列會慢慢講python的學習和使用,如果你看了這篇文章后有興趣想學這門語言,可以先用python來嘗試解決實際工作生活中的問題,邊學邊寫些小程序,我覺得這是學好一門語言最好的辦法,用多了,你自然會喜歡上它和熟悉它。
【本文是51CTO專欄機構(gòu)作者“睿江云EflyCloud”的原創(chuàng)文章,轉(zhuǎn)載請聯(lián)系原作者】