python调用库函数 如何在python中调用库函数

怎样让Python脚本与C++程序互相调用二、Python调用C/C++\x0d\x0a\x0d\x0a\x0d\x0a1、Python调用C动态链接库\x0d\x0a\x0d\x0aPython调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可 。\x0d\x0a(1)C语言文件:pycall.c\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0a/***gcc -o libpycall.so -shared -fPIC pycall.c*/\x0d\x0a#include\x0d\x0a#include\x0d\x0aint foo(int a, int b)\x0d\x0a{\x0d\x0aprintf("you input %d and %d\n", a, b);\x0d\x0areturn a+b;\x0d\x0a}\x0d\x0a(2)gcc编译生成动态库libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c 。使用g++编译生成C动态库的代码中的函数或者方法时,需要使用extern "C"来进行编译 。\x0d\x0a(3)Python调用动态库的文件:pycall.py\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0aimport ctypes\x0d\x0all = ctypes.cdll.LoadLibrary\x0d\x0alib = ll("./libpycall.so")\x0d\x0alib.foo(1, 3)\x0d\x0aprint '***finish***'\x0d\x0a(4)运行结果:\x0d\x0a\x0d\x0a\x0d\x0a2、Python调用C++(类)动态链接库 \x0d\x0a\x0d\x0a需要extern "C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C++方法 。不是用extern "C",构建后的动态链接库没有这些函数的符号表 。\x0d\x0a(1)C++类文件:pycallclass.cpp\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0a#include\x0d\x0ausing namespace std;\x0d\x0a\x0d\x0aclass TestLib\x0d\x0a{\x0d\x0apublic:\x0d\x0avoid display();\x0d\x0avoid display(int a);\x0d\x0a};\x0d\x0avoid TestLib::display() {\x0d\x0acout\x0d\x0ausing namespace std;\x0d\x0aint test()\x0d\x0a{\x0d\x0aint a = 10, b = 5;\x0d\x0areturn a+b;\x0d\x0a}\x0d\x0aint main()\x0d\x0a{\x0d\x0acout\x0d\x0a#include\x0d\x0a#include\x0d\x0a\x0d\x0aint fac(int n)\x0d\x0a{\x0d\x0aif (n
回答于 2022-11-16
python调用数学库要把importmath写在第一行吗答案:不一定要将"import math"写在第一行python调用库函数,但要保证"import math"语句在所调用函数(math.函数)之前python调用库函数,即:先导入相应的库python调用库函数,再调用库中的函数 。
#比如调用πpython调用库函数,以下写法也行 。
print("python 调用 math库中的pi")#第一行
import math#第二行
print(math.pi)
'''#1 , 
【python调用库函数 如何在python中调用库函数】print("python 调用 math库中的pi")
from math import pi as π#第二行
print(π)
'''
'''#2,
print("构造函数p(),返回π值")
from math import *#第二行
def p():
return pi#缩进,调用math库中的pi
print(f"π≈{p()}")
'''
'''#3
def p():
from math import pi as π # 缩进
return π # 缩进
print(p())
'''
Python 外部函数调用库ctypes简介一直对不同语言间的交互感兴趣python调用库函数 , python和C语言又深有渊源python调用库函数,所以对python和c语言交互产生python调用库函数了兴趣 。
最近了解了python提供的一个外部函数库ctypes , 它提供了C语言兼容的几种数据类型,并且可以允许调用C编译好的库 。
这里是阅读相关资料的一个记录,内容大部分来自 官方文档。
ctypes提供了一些原始的C语言兼容的数据类型,参见下表,其中第一列是在ctypes库中定义的变量类型,第二列是C语言定义的变量类型,第三列是Python语言在不使用ctypes时定义的变量类型 。
创建简单的ctypes类型如下:
使用.value访问和改变值:
改变指针类型的变量值:
如果需要直接操作内存地址的数据类型:
下面的例子演示了使用C的数组和结构体:
创建指针实例
使用cast()类型转换
类似于C语言定义函数时,会先定义返回类型,然后具体实现再定义,当遇到下面这种情况时,也需要这么干:
可以简单地将"so"和"dll"理解成Linux和windows上动态链接库的指代,这里python调用库函数我们以Linux为例 。注意,ctypes提供的接口会在不同系统上有出入,比如为了加载动态链接库,在Linux上提供的是cdll , 而在Windows上提供的是windll和oledll。

推荐阅读