實習需要,讀了python的程序,歸來決定系統地學習一下這個被稱為“學得最划算”的語言。
集各家之言,先對Python做一個簡介:
- python是一種面向對象的解釋性的計算機程序設計語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展歷史,成熟且穩定,屬於OpenSource的項目。Python 具有腳本語言中最豐富和強大的類庫,足以支持絕大多數日常應用。這種語言具有非常簡捷而清晰的語法特點,適合完成各種高層任務,幾乎可以在所有的操作系統中運行。Python 可以是簡單的腳本,也可以是大型的復雜程序。事實上,Python 解釋器的最大特點是鼓勵探索和簡化學習過程。
- Python的設計哲學是“優雅”、“明確”、“簡單”。設計者開發時總的指導思想是,對於一個特定的問題,只要有一種最好的方法來解決就好了。這在由Tim Peters寫的python格言(稱為The Zen of Python)里面表述為:There should be one-- and preferably only one --obvious way to do it. 這正好和Perl語言(另一種功能類似的高級動態語言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。
1 Python一瞥:
Python精要,python十分鍾入門,Python 二三事,A Very Brief Introduction to Python And its Data-Types,五分鍾入門神圖
2 快速學習
IBM的入門教程:Discover Python 探索Python(doc):
探索 Python,第 1 部分: Python 的內置數值類型(簡單類型)
探索 Python,第 2 部分: 探索 Python 類型的層次結構(容器類型:元組 tuple)
探索 Python,第 3 部分: 探索 Python 類型的層次結構(容器類型:字符串 string)
探索 Python,第 4 部分: 探索 Python 類型的層次結構(容器類型:列表 list)
探索 Python,第 5 部分: 用 Python 編程(if語句,while循環)
探索 Python,第 6 部分: 用 Python 編程(for循環)
探索 Python,第 7 部分: 探索 Python 類型層次結構(容器類型:字典 dictionary)
探索 Python,第 8 部分: 用 Python 的輸入輸出功能讀取和寫入數據
還有序媛我一直更新豐富的系列博文:
簡明Python教程系列:
簡明python教程 --C++程序員的視角(一):數值類型、字符串、運算符和控制流
簡明python教程 --C++程序員的視角(四):容器類型(字符串、元組、列表、字典)和參考
簡明python教程 --C++程序員的視角(五):面向對象的編程
簡明python教程 --C++程序員的視角(六):輸入輸出
簡明python教程 --C++程序員的視角(九):進階用法
Python速查系列:
Python繪圖系列:
Python圖像處理庫(PIL)--Image,ImageDraw等基本模塊介紹
3 進階學習
Google's Python Class | Understanding Python 國內下載地址 翻譯(谷歌Python課程導讀,安裝Python,Python簡介,Python 字符串)
MIT公開課:計算機科學及編程導論(Python教學)
兩個Python中文社區:啄木鳥Python開源社區 python中國
Python 語言研究:關注 Python 本身語言、語法的研究和探討,收集整理相關的文檔和心得(尤其是中文資料)
4 Python圖書推薦
Python圖書概覽:Python 安裝包中附帶的官方文檔永遠是最有價值的資料之一;書不必貪多,精讀三五本好書,勝過藏書萬卷
python 入門書籍推薦, 三本可以一買的 Python 書
對於語言特性的學習來說,特別推薦前四本:
(8.6分/144)Python入門指南《Python Tutorial》(中英對照版,簡體中文版) -- 最新,最權威,公開文檔
如果你想在最短的時間內就了解python的最基礎使用, 那么不妨花幾個小時時間看看這份官方的python入門教材
-- 最權威的 Python 教程,由 Python 作者 Guido van Rossum 主筆,有少許學院味道。
(8.8分/492)簡明python教程《A Byte of Python》(英文、中文譯本、CHM打包文檔下載)-- 簡潔明了,淺顯易懂,公開文檔
由淺入深講述了python的方方面面內容, 適合對python快速入門
-- 簡潔明了的 Python 教程,即使沒有編程基礎也可閱讀。
(8.7分/159)Python Cookbook —— 編程慣例
以實例學習為主,覆蓋面較廣但不會太深入,主要針對水平在初學者之上的讀者(已經熟悉 Python 的基本語法)
ActiveState 的 Python Cookbook 專欄
《Python食譜》 -- 啄木鳥圖書翻譯項目,基於第一版,未完成
(8.3分/958)Dive Into Python(英文鏡像,中文版,Python 研究)這是一本寫給有經驗的程序員的參考書,並不是推薦給新手的
--為有經驗的程序員編寫的頗受好評的 Python 教程
該書以問題和實例程序為線索,不僅講授 Python 的語法,同時還引導讀者學習 Pythonic 的編程風格。書中大量的延伸閱讀鏈接也很有價值。
(8.4分/67)Python自然語言處理《Natural Language Processing with Python》
(7.6分/27)《Text Process in Python》的附錄A :python精要 “對 python 的超精簡的但絕不失深度的介紹” -- from 譯者 HuangYi
(7.7分/139)python學習手冊《Learning Python》(《學習Python(第二版影印版)》 ,《Python語言入門(第一版中文版)》 ) -- 最細致,最深入
最好的講解 Python 語言特性的書籍,文字淺顯,輔以大量示例,即使初學者也可當作教材學習。
與此同時兼顧了內容的深度和廣度,即使是有經驗的 Python 程序員也會有所收獲。原書第二版主要基於 Python 2.3,作者在主頁上更新了關於 2.4 以后新語言特性的章節。
(7.4分/651)可愛的Python —— CPyUG社區的郵件列表,由Python的行者根據自身經驗組織而成
(7.7分/857)Python核心編程/Core Python Programming —— 全面學習
(7.5分/93)Python參考手冊
5 Google的python編碼規范 (中文 ,英文)
下面的文章給你描述了一個最小的應該遵守的規范合集。如果按照這些指導原則,你將能編寫出更簡潔和漂亮的代碼。作為附加效應,你的程序會變得可讀性更好,更容易的被你和任何其他人修改。
- http://www.python.org/dev/peps/pep-0008/
- http://www.fantascienza.net/leonardo/ar/python_best_practices.html
Python的八榮八恥
以動手實踐為榮, 以只看不練為恥。
以打印日志為榮, 以單步跟蹤為恥。
以空白分隔為榮, 以制表分隔為恥。
以單元測試為榮, 以手工測試為恥。以代碼重用為榮, 以復制粘貼為恥。
以多態應用為榮, 以分支判斷為恥。
以Pythonic為榮,以冗余拖沓為恥。
以總結思考為榮, 以不求甚解為恥。
6 Python的安裝和函數庫
推薦使用IDE python(x,y),發布的Python(x,y)將近400M,收集了眾多的函數庫以及文檔、教程。這也是《用Python做科學計算》一書中推薦的(文)。
“發行版附帶了科學計算方面的很多常用庫,另外還有大量常用庫比如用於桌面軟件界面制作的 PyQt, 還有文檔處理,exe文件生成py2exe等常用庫。另外的還有大量的工具如IDE,制圖制表工具,加強的shell之類。很多下文提到的軟件在此發行版中都有附帶。其他方面,Python(x, y)還附帶了手工整理出的所有庫的離線文檔,每個小版本升級都提供單獨的補丁。總的來說是很用心維護的一個發行版,十分建議安裝這個版本。”“在真正着手開發之前,你應該在下載一份離線的文檔。在 這個頁面下載一份 HTML 格式的( 打不開的話試試 這里),解壓出來其中 index.html 就是文檔主頁面。頁面左邊的 Quick Search 是離線也可以使用的,有對函數功能有疑惑或者要查詢模塊的時候就能在這里查看。”(python(x,y)自帶這個python文檔 )
Python(x,y) has five main features:
- collecting scientific-oriented Python libraries and development environment tools ;
- collecting almost all free related documentation ;
- providing a quick guide to get started in Python / Qt / Spyder ;
- providing an all-in-one setup program, so the user can install or uninstall all these packages and features by clicking on one button only.
Python(x,y) was created for :
- rapid prototyping, using the enhanced Python shell known as IPython ;
- small/big projects (application-like) development, using Spyder - a powerful and interactive cross-platform Integrated Development Environment (IDE) ;
- scientific purpose: scientific computing, numerical simulations, signal processing, image processing, physics (experiments and modeling), engineering, ...
安裝后有ipython(interactive console,豪華加強版python shell)和spyder(這個powerful scientific IDE類似matlab,而IDLE是Python作者提供的簡單Python開發環境)這兩個常用工具。
python數值計算庫:NumPy為Python提供了快速的多維數組處理的能力,而SciPy則在NumPy基礎上添加了眾多的科學計算所需的各種工具包,有了這兩個庫,Python就有幾乎和Matlab一樣的處理數據和計算的能力了。
- NumPy為Python帶來了真正的多維數組功能,並且提供了豐富的函數庫處理這些數組。它將常用的數學函數都進行數組化,使得這些數學函數能夠直接對數組進行操作,將本來需要在Python級別進行的循環,放到C語言的運算中,明顯地提高了程序的運算速度。
- SciPy的核心計算部分都是一些久經考驗的Fortran數值計算庫,例如:
- 線性代數使用LAPACK庫
- 快速傅立葉變換使用FFTPACK庫
- 常微分方程求解使用ODEPACK庫
- 非線性方程組求解以及最小值求解等使用MINPACK庫

特點
Python的特點
- Python對函數式編程只提供了有限的支持(相對於Lisp這種傳統的函數式編程語言)。有兩個標准庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式編程工具。
- Python的支持者較喜歡稱它為一種高階動態編程語言(雖然Python可能被粗略地分類為「腳本語言」(script language),但實際上一些大規模軟件開發計划例如Zope、Mnet及BitTorrent,Google也廣泛地使用它),原因是「腳本語言」泛指僅作簡單編程任務的語言,如shell script、JavaScript等只能處理簡單任務的編程語言,並不能與Python相提並論。
- 很多人還把Python作為一種「膠水語言」(glue language)使用(Python本身被設計為可擴展的。並非所有的特性和功能都集成到語言核心。可以使用C語言、C++、Cython來編寫擴展模塊。Python解釋器本身也可以被集成到其它需要腳本語言的程序內)。使用Python將其他語言編寫的程序進行集成和封裝。在Google內部的很多項目使用C++編寫性能要求極高的部分,然后用Python調用相應的模塊。
- 作者有意的設計限制性很強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。這樣有意的強制程序員養成良好的編程習慣。其中很重要的一項就是Python的縮進規則:C++等語言是以{}來管理塊的,而Python是以縮進來管理的。這樣做的確有他的優越性。相信許多程序員都有過漏去{}的經歷。如果,使用的編譯器或者解釋器優秀的話,你的確可以非常容易的加上漏去的{}。但是,如果不是這樣,我想你會在復雜的代碼中開始漫游了。因為,可能你的編譯器會告訴你一個錯誤的錯誤信息,這個錯誤的位置可能會離你真正錯誤的地方很遠(大概有十萬八千里吧)。相對於此,以縮進管理方式的Python來說,程序員幾乎不用考慮這種問題。其次以縮進方式區分塊的Python在進行復雜的嵌套中,Python代碼就顯得明了許多了。
- 對於Python的代碼類型,基本可分為3種,分別是字節代碼,二進制代碼,優化代碼。他們的后綴名分別是.py .pyc .pyo 這些代碼都可以直接運行,無需做任何的編譯或者連接。Python在執行時,Python解釋器會將源代碼(.py文件)成字節碼byte code(.pyc文件)這種中間形式,然后再由Python Virtual Machine來執行這些byte code。和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠(抽象層次更高)。在運行時,Python會檢測在main.py的當前目錄中有沒有MyPython.pyc文件,如果沒有那么導入MyPython.py並且同時生成MyPython.pyc為下次更快的導入做好准備。這樣,可以減少不少初始化的時間。而且,這一切無需用戶介入,Python會自動完成。
雖然Python是一個非常成功的語言,但是也有必要明白它的局限性。
- 運行效率低下 目前為止,Python可以說是所有主流腳本語言中速度最慢的。(是這樣么?待考.)這與其腳本引擎的設計思路有關。 如果你的應用對於速度有着較高的要求,就要考慮Python是否能滿足需要。不過這一點可以通過使用C編寫關鍵模塊,然后由Python調用的方式加以部分解決。
很多人認為Python很慢(Python開發人員盡量避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁通常不會被合並到Python內。)。不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的情況,Python程序員傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程序。目前可用的JIT技術是Pysco。Cython可以將Python代碼轉換成C代碼。 - 多線程支持欠佳 Python支持多線程,但是其運行效率也不高。
- 獨特的語法 這也許不應該被稱為局限,但是它用縮進來區分語句關系的方式還是給很多初學者帶來了困惑。 即便是很有經驗的Python程序員,也可能陷入陷阱當中。最常見的情況是tab和空格的混用會導致錯誤,而這是用肉眼無法分別的。
- 無類型 作為一種動態語言,隨時隨地創建和使用變量是Python給我們帶來的巨大的便利。但是它也會使得程序不嚴謹,某些錯誤只有在運行中才可能出現。所以,使用Python編程的時候,要對類型做到心里有數。這也使得Python的IDE工具無法提供便利的自動完成等功能。
可以參考百度百科和博文:
優點
簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠專注於解決問題而不是去搞明白語言本身。
易學:Python極其容易上手,因為Python有極其簡單的語法。
免費、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者可以自由地發布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟件中。FLOSS是基於一個團體分享知識的概念。
高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內存一類的底層細節。
可移植性:由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工作在不同平台上)。這些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基於linux開發的android平台。
解釋性:一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。
運行程序的時候,連接/轉載器軟件把你的程序從硬盤復制到內存中並且運行。而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼運行程序。
在計算機內部,Python解釋器把源代碼轉換成稱為字節碼的中間形式,然后再把它翻譯成計算機使用的機器語言並運行。這使得使用Python更加簡單。也使得Python程序更加易於移植。
面向對象:Python既支持面向過程的編程也支持面向對象的編程。在“面向過程”的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在“面向對象”的語言中,程序是由數據和功能組合而成的對象構建起來的。
可擴展性:如果需要一段關鍵代碼運行得更快或者希望某些算法不公開,可以部分程序用C或C++編寫,然后在Python程序中使用它們。
可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。
豐富的庫:Python標准庫確實很龐大。它可以幫助處理各種工作,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其他與系統有關的操作。這被稱作Python的“功能齊全”理念。除了標准庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。
規范的代碼
:Python采用強制縮進的方式使得代碼具有較好可讀性。
局限
強制縮進:這也許不應該被稱為局限,但是它用縮進來區分語句關系的方式還是給很多初學者帶來了困惑。
單行語句和命令行輸出問題:很多時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程序,不需要如Python一樣,必須將程序寫入一個.py文件。