c編寫Python模組

2021-09-24 19:57:23 字數 2359 閱讀 2208

為何要編寫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...