python具有很好的開發靈活性,最大的特點是c語言可以對python進行擴充套件,目前工作中正在進行相關的開發,第一篇文章作為基礎.
實現c函式,用python api封裝,實現倆個功能,1.say_hello,列印hello world! 2.calc_pv,做加法用算.
以下為使用方法:
01
python
2.7
.
3
(default, nov
13
2012
,
11
:
17
:
50
)
02
[gcc
4.1
.
2
20080704
(red hat
4.1
.
2
-
48
)] on linux2
03
type
"help"
,
,
"credits"
or
"license"
for
more information.
04
>>>
05
>>>
import
session
06
>>>
07
>>> session.sayhello()
08
hello world!
09
>>> session.
sum
(
1
,
2
)
10
3
11
>>>
以下為實現的步驟,核心的地方在**裡加了注釋.
01
/**
02
*
03
* $ cpython_eg1.c version1.0 2012-11-13 *** $
04
* @2012 ***.com.cn
05
*
06
*/
07
08
#include "python.h"
09
10
static
pyobject *say_hello(pyobject *self)
11
16
17
static
pyobject *calc_pv(pyobject *self,pyobject *args)
18
30
31
/*
32
* function table
33
* pymethoddef結構體定義:
34
* struct pymethoddef ;
41
*
42
*/
43
44
static
pymethoddef addmethods =
45
,
48
// meth_varargs 帶有引數
49
,
50
/**null代表結束位,py_initmodule會以null代表函式列表結束*/
51
52
};
53
54
/*
55
* initialize
56
*
57
* 如果定義模組名字為session,必須要有initsession(void)函式作為動態介面
58
* python會自動尋找介面呼叫
59
*/
60
61
pymodinit_func initsession(
void
)
62
最後是編譯的過程,首先建立setup.py,內容如下
1
from
distutils.core
import
setup, extension
2
3
module1
=
extension(
'session'
,sources
=
[
'cpython_eg1.c'
],language
=
'c'
)
4
5
setup (name
=
'emar_py_lib'
, version
=
'1.0'
, \
6
description
=
'this is a demo package'
, \
7
ext_modules
=
[module1])
編譯過程為:
1.python setup.py build
2.sudo python setup.py install
使用c語言擴充套件python
背景 我們工作中可能有時需要和第三方對接,而第三方提供的sdk可能是c語言或者c 編寫的,而我們程式使用的語言是python,這時候就需要使用python呼叫c庫 參考官方文件 編寫python擴充套件分三步 第一步 建立應用 使用c語言編寫具體的功能 如果sdk已經提供了並且不需要我們整合,則跳過...
使用C語言擴充套件Python 四
首先,遵循 測試先行 的原則,先來看我們改造後的python這一端,你可以每次讀取音訊原始檔的乙個資料塊,將其轉遞給encoder物件的encode方法,這樣無論你的原始檔是何種格式,你都可以在encoder中進行自由的控制,示例 如下 import clame inbufsize 4096 if ...
使用C語言擴充套件Python 四
首先,遵循 測試先行 的原則,先來看我們改造後的python這一端,你可以每次讀取音訊原始檔的乙個資料塊,將其轉遞給encoder物件的encode方法,這樣無論你的原始檔是何種格式,你都可以在encoder中進行自由的控制,示例 如下 import clame inbufsize 4096 if ...