Python 大雜燴

Python (發音:[ 'paiθ(ə)n; (US) 'paiθɔn ]),是一種面向對象的解釋性的計算機程序設計語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展歷史,成熟且穩定。Python 具有腳本語言中最豐富和強大的類庫,足以支持絕大多數日常應用。

這種語言具有非常簡捷而清晰的語法特點,適合完成各種高層任務,幾乎可以在所有的操作系統中運行。
目前,基於這種語言的相關技術正在飛速的發展,用戶數量急劇擴大,相關的資源非常多。

Python的特色
簡單————Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣,儘管這個英語的要求非常嚴格!Python的這種僞代碼本質是它最大的優點之一。它使你能夠專注於解決問題而不是去搞明白語言本身。
易學————就如同你即將看到的一樣,Python極其容易上手。前面已經提到了,Python有極其簡單的語法。
免費、開源————Python是FLOSS(自由/開放源碼軟件)之一。簡單地說,你可以自由地發佈這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟件中。FLOSS是基於一個團體分享知識的概念。這是爲什麼Python如此優秀的原因之一——它是由一羣希望看到一個更加優秀的Python的人創造並經常改進着的。
高層語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節。
可移植性————由於它的開源本質,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!
解釋性————這一點需要一些解釋。一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。當你運行你的程序的時候,連接/轉載器軟件把你的程序從硬盤複製到內存中並且運行。而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼 運行 程序。在計算機內部,Python解釋器把源代碼轉換成稱爲字節碼的中間形式,然後再把它翻譯成計算機使用的機器語言並運行。事實上,由於你不再需要擔心如何編譯程序,如何確保連接轉載正確的庫等等,所有這一切使得使用Python更加簡單。由於你只需要把你的Python程序拷貝到另外一臺計算機上,它就可以工作了,這也使得你的Python程序更加易於移植。
面向對象————Python即支持面向過程的編程也支持面向對象的編程。在“面向過程”的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在“面向對象”的語言中,程序是由數據和功能組合而成的對象構建起來的。與其他主要的語言如C++和Java相比,Python以一種非常強大又簡單的方式實現面向對象編程。
可擴展性————如果你需要你的一段關鍵代碼運行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然後在你的Python程序中使用它們。
可嵌入性————你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。
豐富的庫————Python標準庫確實很龐大。它可以幫助你處理各種工作,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其他與系統有關的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。
概括————Python確實是一種十分精彩又強大的語言。它合理地結合了高性能與使得編寫程序簡單有趣的特色。

Python的Hello World程序
下面是一個在標準輸出設備上輸出Hello World的簡單程序,這種程序通常作爲開始學習編程語言時的第一個程序:
#!/usr/bin/env python
print "Hello, world!"
或者:
import sys
sys.stdout.write("Hello, world/n")

Python的歷史
Python的創始人爲Guido van Rossum。1989年聖誕節期間,在阿姆斯特丹,Guido爲了打發聖誕節的無趣,決心開發一個新的腳本解釋程序,做爲 ABC 語言的一種繼承。之所以選中 Python(大蟒蛇的意思)作爲程序的名字,是因爲他是一個Monty Python的飛行馬戲團的愛好者。
ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC 這種語言非常優美和強大,是專門爲非專業程序員設計的。但是ABC語言並沒有成功,究其原因,Guido 認爲是非開放造成的。Guido 決心在 Python 中避免這一錯誤(的確如此,Python 與其它的語言如C、C++和Java結合的非常好)。同時,他還想實現在 ABC 中閃現過但未曾實現的東西。
就這樣,Python在Guido手中誕生了。實際上,第一個實現是在Mac機上。可以說,Python是從ABC發展起來,主要受到了Modula-3(另一種相當優美且強大的語言,爲小型團體所設計的)的影響。並且結合了Unix shell和C的習慣。
Python在編程語言中的定位
很多大規模軟件開發計劃例如 Zope, Mnet 及 BitTorrent. Google都在廣泛地使用它。
通常認爲,Python是一種解釋性的語言,但是這種說法是不正確的,實際上,Python在執行時,首先會將.py文件中的源代碼編譯成Python的byte code(字節碼),然後再由Python Virtual Machine來執行這些編譯好的byte code。這種機制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級的Virtual Machine。這裏的高級並不是通常意義上的高級,不是說Python的Virtual Machine比Java或.NET的功能更強大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠。或者可以這麼說,Python的Virtual Machine是一種抽象層次更高的Virtual Machine。
基於C的Python編譯出的字節碼文件,通常是.pyc格式。

在實際開發中,python常被暱稱爲膠水語言,這不是說他會把你的手指粘住,而是說他能夠很輕鬆的把用其他語言製作的各種模塊(尤其是C/C++)輕鬆地聯結在一起。常見的一種應用情形是,使用python快速生成程序的原型(有時甚至是程序的最終界面),然後對其中有特別要求的部分,用更合適的語言改寫,比如3D遊戲中的圖形渲染模塊,速度要求非常高,就可以用C++重寫。

Python的設計理念
可擴充性可說是Python作爲一種編程語言的特色。新的內置模塊(module)可以用C 或 C++寫成。而我們也可爲現成的模塊加上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)完全相反。這似乎是人們常把Perl和Python互相比較的重要原因。
Python語言是一種清晰的語言的另一個意思是,它的作者有意的設計限制性很強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。這樣有意的強制程序員養成良好的編程習慣。其中很重要的一項就是Python的縮進規則。
例如if語句:
if age<21:
print "You cannot buy wine!/n"
print "But you can buy chewing gum./n"
print "this is outside if/n"
一個和其他大多數語言(如C)的區別就是,一個模塊的界限,完全是由每行的首字符在這一行的位置來決定的(而C語言是用一對花括號{}來明確的定出模塊的邊界的,與字符的位置毫無關係)。這一點曾經引起過爭議。因爲自從C這類的語言誕生後,語言的語法含義與字符的排列方式分離開來,曾經被認爲是一種程序語言的進步。不過不可否認的是,通過強制程序員們縮進(包括if,for和函數定義等所有需要使用模塊的地方),Python確實使得程序更加清晰和美觀。
另外Python在其他部分的設計上也堅持了清晰劃一的風格,這使得Python稱爲一門易讀性、易維護性好,並且被大量用戶所歡迎的、用途廣泛的語言。Python直接編寫的程序段有時運行效率甚至高於用C編寫的程序。

Python的不適之處
雖然Python是一個非常成功的語言,但對於習慣其他語言的程序員,有兩個地方會讓他們感覺略有不適。
1. 強制縮進
這也許不應該被稱爲侷限,但是它用縮進來區分語句關係的方式還是給很多初學者帶來了困惑。即便是很有經驗的Python程序員,也可能陷入陷阱當中。最常見的情況是tab和空格的混用會導致錯誤,而這是用肉眼無法分別的。
2. 單行語句和命令行輸出問題
很多時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較爲方便的在shell下完成簡單程序,不需要如Python一樣,必須將程序寫入一個.py文件。(對很多用戶而言這也不算是限制)

Python的缺點和補救措施
NO.1 運行速度(雖然比java快,但沒法和需要編譯的語言相比。)。有速度要求的話,用C++改寫關鍵部分吧。
NO.2 國內市場較小(國內以python來做主要開發的,目前只有一些 web2.0公司)。但時間推移,目前很多國內軟件公司,尤其是遊戲公司,也開始規模使用他。
No.3 中文資料匱乏(好的python中文資料屈指可數)。託社區的福,有幾本優秀的教材已經被翻譯了,但入門級教材多,高級內容還是隻能看英語版。
NO.4 構架選擇太多(沒有像C#這樣的官方.net構架,也沒有像rudy由於歷史較短,構架開發的相對集中。rudy on rails 構架開發中小型web程序天下無敵)。不過這也從另一個側面說明,python比較優秀,吸引的人才多,項目也多。

Python的前景
Python在編程領域的佔有率一直處於穩步上升之中,根據最新的數據,Python排名第六。前五名分別是Java、C、VB、PHP和C++. 作爲一個很年輕的語言,Python的位置已經相當令人振奮了。隨着微軟將Python納入.Net 平臺,相信Python的將來會更加強勁發展。Python 很可能會成爲.Net平臺快速開發的主流語言。欲瞭解這方面情況,請參考Iron Python的相關信息.
著名的搜索引擎 Google 也大量使用Python。更加令人吃驚的是,在Nokia智能手機所採用的Symbian操作系統上,Python成爲繼C++,Java之後的第三個編程語言!2006年的Google編程大賽已經將Python作爲參賽語言之一,可見Python的影響力之巨大。

Python的應用
Zope-應用服務器
Plone-內容管理系統
Django-鼓勵快速開發的web framework
Twisted - Python Network Application Framework Python的網絡應用程序框架
TurboGears - 另一個Web應用快速開發框架
Bit Torrent - 著名的BT下載工具
更多python的著名應用可以參看該地址:http://www.python.org/about/success/

Python語言資源
官方主頁 :http://www.python.org/
For windows的 python解釋器 (包括tkInterGUI開發環境,一個簡單的IDE,完整廣泛的英文文檔)9MB:http://www.python.org/ftp/python/2.4.3/python-2.4.3.msi
一份不錯的python中文教程 :http://www.woodpecker.org.cn/obp/diveintopython-zh-5.4/zh-cn/dist/html/toc/index.html 該站致力於python研究,站內還有大量優秀教材下載。
python中文社區 :http://python.cn/ 國內python大牛盡會於此
http://www.pythonet.cn - python 中文手冊
ChinaUNIX論壇區的python版 http://bbs.chinaunix.net/forum-55-1.html 基本可以認爲是國內論壇中python水平最高的
一本最佳的python入門書籍 (英文)http://china-pub.shop.eol.cn/computers/common/info.asp?id=25523
一個很好的開源pythonIDE http://stani.be/python/spe/blog/

Python的庫
由於設計者和開源社區的共同努力,在python中有大量優秀的庫可以被直接調用以高效地完成不同需求的工作。這裏列舉一些常見常用的庫:
Tkinter———— Python默認的圖形界面接口。
Tkinter是一個和Tk接口的Python模塊,Tkinter庫提供了對Tk API的接口,它屬於Tcl/Tk的GUI工具組。Tcl/Tk是由John Ousterhout發展的書寫和圖形設備。Tcl(工具命令語言)是個宏語言,用於簡化shell下複雜程序的開發,Tk工具包是和Tcl一起開發的,目的是爲了簡化用戶接口的設計過程。Tk工具包由許多不同的小部件,如一個按鈕、一個滾動條等。通過Tk提供的這些小部件,我們就可快速地進行GUI開發。Perl、Scheme等語言也利用Tk庫進行GUI開發。Tkinter是跨平臺,在各種平臺下都能使用。
Python Imaging Library(PIL)————python提供強大的圖形處理的能力,並提供廣泛的圖形文件格式支持,該庫能進行圖形格式的轉換、打印和顯示。還能進行一些圖形效果的處理,如圖形的放大、縮小和旋轉等。是Python用戶進行圖象處理的強有力工具。
Pmw(Python megawidgets)Python超級GUI組件集————一個在python中利用Tkinter模塊構建的高級GUI組件,每個Pmw都合併了一個或多個Tkinter組件,以實現更有用和更復雜的功能。
PyXML———— 用Python解析和處理XML文檔的工具包,包中的4DOM是完全相容於W3C DOM規範的。它包含以下內容:
xmlproc: 一個符合規範的XML解析器。
Expat: 一個快速的,非驗證的XML解析器。 還有其他
和他同級別的還有 PyHtml PySGML
PyGame———— 用於多媒體開發和遊戲軟件開發的模塊。
PyOpenGL———— 模塊封裝了“OpenGL應用程序編程接口”,通過該模塊python程序員可在程序中集成2D和3D的圖形。
NumPy、NumArray和SAGE———— NumArray是Python的一個擴展庫,主要用於處理任意維數的固定類型數組,簡單說就是一個矩陣庫。它的低層代碼使用C來編寫,所以速度的優勢很明顯。NumPy是Numarray的後繼者,用來代替NumArray。SAGE是基於NumPy和其他幾個工具所整合成的數學軟件包,目標是取代Magma, Maple, Mathematica和Matlab 這類工具。
MySQLdb模塊———— 用於連接MySQL數據庫。還有用於zope的ZMySQLDA模塊,通過它就可在zope中連接mysql數據庫。
PyGTK ———— 用於python GUI程序開發的GTK+庫。GTK就是用來實現GIMP和Gnome的那個庫。有了它,你完全可以自信的嘗試自己製造Photoshop
PyQt ———— 用於python的Qt開發庫。QT就是實現了KDE環境的那個庫,由一系列的模塊組成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300個類和超過5750個的函數和方法。PyQt還支持一個叫qtext的模塊,它包含一個QScintilla庫。該庫是Scintillar編輯器類的Qt接口。
PyMedia ———— 用於多媒體操作的python模塊。它提供了豐富而簡單的接口用於多媒體處理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平臺下使用。
Psyco ———— 一個Python代碼加速度器,可使Python代碼的執行速度提高到與編譯語言一樣的水平。
Python-ldap ———— 提供一組面向對象的API,可方便地在python中訪問ldap目錄服務,它基於OpenLDAP2.x。
smtplib模塊 ———— 發送電子郵件。
ftplib模塊 ———— 定義了FTP類和一些方法,用以進行客戶端的ftp編程。我們可用python編寫一個自己的ftp客戶端程序,用於下載文件或鏡像站點。如果想了解ftp協議的詳細內容,請參考RFC959。
xmpppy模塊 ———— Jabber服務器採用開發的XMPP協議,Google Talk也是採用XMPP協議的IM系統。在Python中有一個xmpppy模塊支持該協議。也就是說,我們可以通過該模塊與Jabber服務器通信,是不是很Cool。
下面這些就不詳細介紹,只列出名字和功能
adodb ———— ADO數據庫連接組件
bsddb3 ———— BerkeleyDB的連接組件
chardet ———— 編碼檢測
Cheetah ———— 構建和擴充任何種類的基於文本的內容
cherrypy ———— 一個WEB framework
ctypes ———— 用來調用動態鏈接庫
Cx-oracle ———— 連接oracle的工具
DBUtils ———— 數據庫連接池
django ———— 一個WEB framework
DPKT ———— raw-scoket網絡編程
docutils ———— 用來寫文檔的
dpkt ———— 數據包的解包和組包
feedparser ———— rss解析
Kodos ———— 正則表達式調試工具
Mechanize ———— 爬蟲連接網站常用
pefile ———— windows pe文件解析器
py2exe ———— 用來生成windows可執行文件
pycurl ———— URL處理工具
pydot ———— 畫圖的,graphiz
pyevent ———— Python的事件支持
pylint ———— 培養良好的編碼習慣
Pylons ———— 又一個web framework
pypcap ———— 抓包的
pysqlite2 ———— SQLite的連接組件
python-dnet ———— 控制網絡安全的其他設備
pythonwin ———— Python的Windows擴展
pywmi ———— 省了好多折騰功夫
reportlab ———— Python操作PDF的Libary。
scapy ———— 網絡包構建分析框架,可編程的wireshark,有興趣的google “Silver Needle in the Skype”
scons ———— 項目構建工具,寫好了模板用起來還是很方便的
sendpkt ———— Python發包
setuptools ———— 一套python包管理機制
simplejson ———— JSON的支持
sqlalchemy ———— SQL數據庫連接池
SQLObject ———— 數據庫連接池
twisted ———— 巨無霸的網絡編程框架
winpdb ———— 自己的程序或者用別的庫不太明白的時候就靠它了
wxPython ———— GUI編程框架,熟悉MFC的人會非常喜歡,簡直是同一架構
除此之外還有很多,根本無法完全列舉。

開源社區的工作已經完成到這樣的程度,基本上各種常見的編程需求都已經有非常成熟穩定高速的模塊來實現,你所需要做的,只是去閱讀文檔然後把它找出來。
歡迎大家光臨python中國進行交流
一切關於python教程都在"python中國"
http://www.okpython.com

python資源:


老黃紙條箱(黃冬)
網址:http://blog.opensource.org.cn/hdcola/

Limodou的學習筆記(木頭)
網址:http://blog.donews.com/limodou/
http://limodou.javaeye.com/

邱英波
http://www.dup2.org/blog


肥三的專欄——熱酷網CTO樑冰鴻
網址:http://blog.csdn.net/FeiSan

社區/論壇

靈蛇網:http://bbs.pythonid.com/

Python中文社區:http://www.pythonbbs.cn/

http://bbs.chinaunix.net/thread-1164933-1-1.html
發佈了4 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章