附
為何要編寫c擴充套件 保護核心** 解決效能瓶頸 建立c一些特有的東西 環境: linux .13.9-300.fc27.x86_64 python 3.6.3 開始 目標 這次我麼來實習製作python3的擴充套件,實現兩個功能:
求乙個整數的絕對值 求乙個字串的逆序 用c實現這個功能:
int
my_abs
(int n)
void
my_reverse
(char *s)
} }
//作用,接受python傳的值,將結果計算後轉為python物件返回給python
//返回型別pyobject*,函式名:模組名_函式名
static pyobject *extest_abs
(pyobject *self,pyobject *args)
return (pyobject*)py_buildvalue("i",my_abs(num));//將結果轉換為python型別並返回
}static pyobject *extest_reverse
(pyobject *self,pyobject *args)
my_reverse(s);
return (pyobject*)py_buildvalue("s",s);
}
static pymethoddef extestmethods = ,//函式名,包裝函式名,解析
,,//作為結束
};
static
struct pymoduledef extestmodule = ;
void
pyinit_extest
()
my_extend.c
#include
#include
#include
#include
intmy_abs
(int n)
void
my_reverse
(char *s)
}}void
test
(void)
//作用,接受python傳的值,將結果計算後轉為python物件返回給python
//返回型別pyobject*,函式名:模組名_函式名
static pyobject *extest_abs
(pyobject *self,pyobject *args)
return (pyobject*)py_buildvalue("i",my_abs(num));
}static pyobject *extest_reverse
(pyobject *self,pyobject *args)
my_reverse(s);
return (pyobject*)py_buildvalue("s",s);
}static pyobject *extest_test
(pyobject *self,pyobject *args)
//為每個模組增加pymethoddef modulemethods陣列
static pymethoddef extestmethods = ,,,
,};static
struct pymoduledef extestmodule = ;
void
pyinit_extest
()
setup.py
from distutils.core import setup,extension
mod = 'extest' #模組名
setup(name=mod,ext_modules=[extension(mod,sources=['my_extend.c'])]) #源檔名
python3 setup.py install
>>>
import extest
>>> extest.test()
test my_abs:
|-8590|=8590
|-0|=0
|5690|=5690
test my_reverse:
'elppa'
'i love you!' reverse is
'!uoy evol i'
null reverse is (null)
>>> extest.abs(-0)
0>>> extest.reverse("abc")
'cba'
C 模組呼叫 C 編寫模組
c 模組呼叫 c 編寫模組 涉及知識點 1 ifdef cplusplus extern c 處理其中的 要明白為何使用extern c 還得從cpp 中對函式的過載處理開始說起。在c 中,為了支援過載機制,在編譯生成的彙編碼中,要對函式的名字進行一些處理,加入比如函式的返 回型別等等.而在c 中,...
python使用random模組編寫驗證碼程式
random具體介紹 1 首先介紹程式中用到的ascii碼 65 90 對應的ascii a z 97 122 對應的ascii a zimport random defverification code val row 0 迴圈val次,驗證碼位數 while row val row 1 獲取隨機...
python使用signal模組編寫超時處理
寫了乙個超時處理指令碼,主要用來超時處理nfs服務掛死的情況,如果檢測到掛載超時,就會執行sys.exit 1 報錯退出 usr bin python coding utf 8 import os,os.path,sys,commands,signal,time class mountexcepit...