c中嵌入Python,提供灵活性
生活随笔
收集整理的這篇文章主要介紹了
c中嵌入Python,提供灵活性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我的項目進行到這個時候才發現僅僅只有c還是不能完成所有的事情,為了提供更好的個性化應用,需要一個解釋性語言加入到體系中來,對比發現Python是最好的選擇,不管是從性能上講還是內存管理等各方面將都有獨到之處,他是天然的聯合液體。
?? 現在的需求只有很小的一個部分,就是對于用戶數據的二次處理,但是考慮到更為復雜的多層應用,將它進一步擴大應用將是系統的一大亮點,畢竟允許用戶讀寫程序了。
?? 以下是Python的一些介紹,轉載過來的:
?? Python (發音:[ 'paiθ(?)n; (US) 'paiθ?n ]n.蟒蛇,巨蛇 ),是一種面向對象的解釋性的計算機程序設計語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展歷史,成熟且穩定。Python 具有腳本語言中最豐富和強大的類庫,足以支持絕大多數日常應用。
[編輯本段]
英文簡介
Python is an object-oriented explanation of computer programming languages, is a powerful and well-size-fits-all language, has been more than a decade of development, maturity and stability. Python scripting language with the most rich and powerful class library, enough to support the vast majority of day-to-day applications.
This language has a very simple and clear characteristics of grammar, for a variety of high-level mission to complete, almost all of the operating system to run.
At present, this language is related to the rapid technological development, the rapid expansion of the number of users, and related resources.
這種語言具有非常簡捷而清晰的語法特點,適合完成各種高層任務,幾乎可以在所有的操作系統中運行。
目前,基于這種語言的相關技術正在飛速的發展,用戶數量急劇擴大,相關的資源非常多。
[編輯本段]
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構架,也沒有像ruby由于歷史較短,構架開發的相對集中。Ruby 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的庫
由于設計者和開源社區的共同努力,在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資源:
官方主頁 :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教程都在"python中國"
http://www.okpython.com
老黃紙條箱(黃冬)
網址: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 與50位技術專家面對面20年技術見證,附贈技術全景圖
?? 現在的需求只有很小的一個部分,就是對于用戶數據的二次處理,但是考慮到更為復雜的多層應用,將它進一步擴大應用將是系統的一大亮點,畢竟允許用戶讀寫程序了。
?? 以下是Python的一些介紹,轉載過來的:
?? Python (發音:[ 'paiθ(?)n; (US) 'paiθ?n ]n.蟒蛇,巨蛇 ),是一種面向對象的解釋性的計算機程序設計語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展歷史,成熟且穩定。Python 具有腳本語言中最豐富和強大的類庫,足以支持絕大多數日常應用。
[編輯本段]
英文簡介
Python is an object-oriented explanation of computer programming languages, is a powerful and well-size-fits-all language, has been more than a decade of development, maturity and stability. Python scripting language with the most rich and powerful class library, enough to support the vast majority of day-to-day applications.
This language has a very simple and clear characteristics of grammar, for a variety of high-level mission to complete, almost all of the operating system to run.
At present, this language is related to the rapid technological development, the rapid expansion of the number of users, and related resources.
這種語言具有非常簡捷而清晰的語法特點,適合完成各種高層任務,幾乎可以在所有的操作系統中運行。
目前,基于這種語言的相關技術正在飛速的發展,用戶數量急劇擴大,相關的資源非常多。
[編輯本段]
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構架,也沒有像ruby由于歷史較短,構架開發的相對集中。Ruby 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的庫
由于設計者和開源社區的共同努力,在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資源:
官方主頁 :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教程都在"python中國"
http://www.okpython.com
老黃紙條箱(黃冬)
網址: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 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的c中嵌入Python,提供灵活性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小波阈值去噪原理及实现
- 下一篇: 这也能发Nature??年度奇葩论文大赏