pythonC移植
Ⅰ 怎樣把python代碼嵌入到C程序
步驟1:安裝Python開發包
由於需要訪問Python/C API,首先安裝Python開發包。
在Debian,Ubuntu或Linux Mint中:
在CentOS,Fedora或RHEL中:
安裝成功後,Python頭文件在/usr/include/python2.7。根據Linux發行版的不同,確切的路徑可能是不相同的。例如,CentOS 6中是/usr/include/python2.6。
步驟2:初始化解釋器並設置路徑
C中嵌入Python的第一步是初始化Python解釋器,這可以用以下C函數完成。
初始化解釋器後,需要設置你的C程序中要導入的Python模塊的路徑。例如,比如你的Python模塊位於/usr/local/moles。然後使用以下C函數調用來設置路徑。
步驟3:數據轉換
C中嵌入Python最重要的方面之一是數據轉換。從C中傳遞數據到Python函數,需要首先將數據從C數據類型轉換到Python數據類型。Python/C API提供各種函數來實現這。例如,轉換C字元串到Python字元串,使用PyString_FromString函數。
另外一個類似函數PyInt_FromLong,將C中long數據類型轉換為Python int。每個Python/C API函數返回一個PyObject類型的引用。
步驟4:定義一個Python模塊
當你想嵌入Python代碼到另一種語言如C,該代碼需要被寫成Python模塊,然後用另一種語言「導入」。所以讓我們來看看如何在C中導入Python模塊。
為了進行說明,我們實現一個簡單的Python模塊例子如下:
以上的Python函數有一個字元串作為參數並返回兩個重復的字元串。例如,如果輸入字元串是「cyberpersons」,該函數返回'cyberpersonscyberpersons'。此模塊文件命名為「printData.py」並將它放在前面聲明的Python模塊目錄中(/usr/local/moles)。
步驟5:載入一個Python模塊
現在你已經定義了Python模塊,是時候在C程序中載入它了。導入模塊的C代碼看起來像這樣:
步驟6:構建函數的參數
當載入一個模塊時,可以調用模塊中定義的Python函數。通常,我們需要傳遞一個或多個參數到一個Python函數。我們必須構建一個Python元組對象,它包括Python函數中的參數。
在我們的例子中,printData函數定義帶一個參數的模塊。因此,我們構建一個大小是一的Python元組對象如下。我們可以使用PyTuple_SetItem設置元組對象的每個項。
我們已經成功構建一個參數傳遞到函數調用,是時候從C程序調用python函數了。
步驟7:調用Python函數
一旦成功創建Python元組對象作為函數參數,我們可以調用一個帶參數的Python函數。為此,通過使用PyObject_GetAttrString首先獲得模塊中定義的函數的引用,然後使用PyObject_CallObject調用該函數。例如:
步驟8:錯誤檢查
避免運行時錯誤的常見方法是檢查函數的返回值並根據返回值採取適當的行動。類似於C程序中的全局變數errno,Python/C API提供一個全局指示符,它報告最後發生的錯誤。當Python/C API函數失敗,全局指示符設置為指示錯誤,並且PyErr_Print可以用於顯示相應的人類可讀的trackback。例如:
在你的應用程序中,你可以輕松地將各種錯誤檢查。
這里是完整的C程序,它如本教程描述的嵌入Python代碼。
步驟9:編譯和執行
保存以上代碼到finalCode.c,並且鏈接Python庫(-lpython2.7)編譯該代碼。根據發行版的不同,可能使用不同的版本(例如,-lpython2.6)。
Ⅱ 塞班的python與安卓的python有何區別,能把塞班的python程序移植到安卓嗎
python解釋器本身用c/c++實現的,所以對於語言的核心部分,塞班的python與安卓的python是一樣的,但是因為運行的操作系統不同,所以對應系統提供的專有的庫肯定是不同的(例如創建界面環境的庫),如果是十分依賴系統的庫也應該是有差距的。
塞班的python程序不帶界面的移植比較容易,但是帶界面的移植也不能說完全不可能,但是難度肯定是非常大的。
Ⅲ 如何使Python嵌入C++應用程序
Python容易擴展和嵌入。Python提供的許多標准模塊支持C或者C++介面。Python和C可以一起工作,它可以嵌入到C或者C++的應用程序當中,因此可用Python語言為應用程序提供腳本介面,由於支持跨語言開發。
可用Python設計概念化應用程序,並逐步移植到C,使用前不必用C重寫應用程序。(Jython使Python可以和Java一起工作,使開發者可以在Python裡面輪世調Java的包,也可以在Java裡面使用Python的對象。還有更妙的,由於Jython的解釋器完全用Java編寫,因此可以在支持Java的任何平台上部署Python程序,甚至WEB瀏覽器也可以直接運行Python腳本。)
提出問題在某個C++應用程序中,我們用一組插件來實現一些具有統一介面的功能,我們使用Python來代替動態鏈接庫形式的插件,這樣可以方便地根據需求的變化改寫腳本代碼,而不是必須重新編譯鏈接二進制的動態鏈接庫。Python強大的功能足以勝任,但是有一些操作系統特定的功能需要用C++來實現,再由Python調用。所以,最基者世礎地,我們需要做到:
1. 把Python嵌入首桐肢到C++應用程序中,在C++程序中調用Python函數和獲得變數的值;
2. 用C++為Python編寫擴展模塊(動態鏈接庫),在Python程序中調用C++開發的擴展功能函數。
Ⅳ python語言相對於C和C 有什麼優勢
1、Python的語法是比較獨特的,都是靠空格來嚴格控制的,但是對於剛剛接觸編程的人可能不習慣。
2、雖然說c語言可以更好的掌握編程基礎,但是學習起來是比較枯燥的,很難看到成效,而Python就不同,不僅入門簡單,而且適合零基礎、也是初學者的首選,主要涉及范圍廣泛,可以從業崗位多。
3、Python的見效是非常快,開發速度也快,大部分使用都是高級介面。
Ⅳ python和c語言的區別
1、語言類型不同。
Python是一種侍虛和動態類型語言,又是強類型語言。它們確定一個變數的類型是在您第一次給它賦值的時候。C是靜態類型語言,一種在編譯期間就確定數據類型的語言。大多數靜態類型語言是通過要求在使用任一變數之前聲明其數據類型來保證這一點的。
2、對象機制不同。
Python中所有的數據,都是由對象或者對象之間的關系表示的,函數是對象,字元串是對象,每個東西都是對象的概念。每一個對象都有三種屬性:實體,類型和值。
C中沒有對象這個概念,只有「數據的表示」,比如說,如果有兩個int變數a和b,想比較大小,可以用a==b來判斷,但是如果是兩個字元串變數a和b,就不得不用strcmp來比較了,因為此時,a和b本質上是指向字元串的指針,如果直接譽談用==比較,那比較的實際是指針中存儲的值地址。老盯
3、變數類型不同。
python六個標準的數據類型:Number數字、String字元串、List列表、Tuple元祖、Sets集合、Dictionary字典,數字類型有四種類型:整數、布爾型、浮點數和復數。C語言也可分四類:基本類型、枚舉類型、void的類型、派生類型。基本類型:整數類型、浮點類型。
Ⅵ Python的特點有哪些
python的五個特點:
1、簡單易學
python是一種代表簡單主義思想的語言,閱讀一個良好的python程序就感覺像是在讀英語段落一樣,盡管這個英語段的語法要求非常嚴格。python最大的優點之一是具有偽代碼的本質,它使我們在開發python程序時,專注的是解決問題,而不是搞明白語言本身。
2、面向對象
python既支持面向過程編程,也支持面向對象編程。在面向過程的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在面向對象的語言中,程序是由數據和功能組合而成的對象構建起來的。
與其他主要的語言如C++和Java相比,python以一種非常強大又簡單的方式實現面向對象編程。
3、可移植性
由於python的開源本質,它已經被移植在許多平台上。如果小心地避免使用依賴於系統的特性,那麼所有python程序無需修改就可以在下述任何平台上運行,如:Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、QNX、VMS、Windows
CE,甚至還有PocketPC、Symbian以及Google基於Linux開發的android平台。
4、解釋性
一個用編譯型語言如C或C++寫的程序可以從源文件轉換到一個計算機使用的語言。這個過程通過編譯器和不同的標記、選項完成。當運行程序的時候,連接轉載器軟體把程序從硬碟復制到內存中並且運行。
而python語言寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序。在計算機內部,python解釋器把源代碼轉換成稱為位元組碼的中間形式,然後再把它翻譯成計算機使用的機器語言並運行。
事實上,由於不再擔心如何編譯程序,如何確保連接轉載正確的庫等,這一切使得使用python變得更為簡單。
5、開源
python是FLOSS之一。簡單地說,你可以自由地發布這個軟體的拷貝,閱讀它的源代碼,對它做改動,把它的一部分用於新的自由軟體中。
FLOSS是基於一個團體分享知識的概念,這是為什麼python如此優秀的原因之一;它是由一群希望看到一個更加優秀的python的人創造並經常改進這的。