新聞中心
C++types是python的一個外部庫,可以使用python語言調(diào)用已經(jīng)編譯好的C語言函數(shù)以及數(shù)據(jù)類型并進行數(shù)據(jù)交換等。ctypes的官方文檔在https://docs.python.org/3/library/ctypes.html

10多年的潁州網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整潁州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“潁州網(wǎng)站設(shè)計”,“潁州網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
1、ctypes基本數(shù)據(jù)類型映射表
2、python調(diào)用c語言的函數(shù)庫
(1)生成c語言函數(shù)
#Step 1: test.c #includeint add(int a, int b) { return a + b; }
(2)編譯動態(tài)鏈接庫生成 libtest.so文件(DLL)
gcc -fPIC -shared test.c -o libtest.so
(3)調(diào)用DLL文件
#Step 3: test.py
from ctypes import *
mylib = CDLL("libtest.so")或者cdll.LoadLibrary("libtest.so")
add = mylib.add
add.argtypes = [c_int, c_int] # 參數(shù)類型,兩個int(c_int是ctypes類型,見上表)
add.restype = c_int # 返回值類型,int (c_int 是ctypes類型,見上表)
sum = add(3, 6)3、指針和引用
對指針實例賦值只會改變其指向的內(nèi)存地址,而不是改變內(nèi)存的內(nèi)容。指針實例有一個contents屬性,返回這個指針所指向的對象。
from ctype import * i = c_int(1) pi = POINTER(c_int)(i) pi2 = pointer(i) print pi.contents #返回指針指向?qū)ο蟮闹?print pi2.contents
pointer 和 POINTER 的區(qū)別是,pointer 返回一個實例,POINTER 返回一個類型。
4、結(jié)構(gòu)類型數(shù)據(jù)
Structures和Unions必須繼承Structure和Union基礎(chǔ)類,它們都在ctypes模塊中定義,每一個子類必須定義個fields屬性,fields是一個二維的tuples列表,包含著每個field的name及type,這field類型必須是一個ctypes類型,如c_int,或者任何其他的繼承ctypes的類型,如Structure、Union、Array、指針等。
from ctypes import *
import types
class Test(Structure):
_fields_ = [('x', c_int),('y', c_char)]
test1 = Test(1, 2)如結(jié)構(gòu)體用于鏈表操作,即包含指向結(jié)構(gòu)體指針時,則需如下定義:
from ctypes import *
import types
class Test(Structure):
pass
Test._fields_ = [('x', c_int),('y', c_char),('next', POINTER(Test))]python學習網(wǎng),大量的免費python視頻教程,歡迎在線學習!
當前題目:創(chuàng)新互聯(lián)Python教程:c怎么與python交互
轉(zhuǎn)載來于:http://m.5511xx.com/article/cccpcgp.html


咨詢
建站咨詢
