python 中 ctypes 的使用尝试
2021/7/19 22:05:07
本文主要是介绍python 中 ctypes 的使用尝试,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近在看Python的性能优化方面的文章,突然想起ctypes这个模块,对于这个模块一直不是很理解,不过再次看完相关资料有了些新的观点。
ctypes 这个模块个人观点就是提供一个Python类型与C类型数据转换接口或者说是规则的一个模块。ctypes定义的数据类型其实并不是一种数据类型,而更应该说是一种转换规则。ctypes定义的数据类型都是需要和Python数据类型进行关联的,然后传给C函数进行调用,在C函数调用的时候是根据ctypes的数据类型进行转换的,把关联的Python数据类型转换为C数据类型传给C函数。如果是ctypes定义的指针或者地址,其实是将Python变量对应的内存空间地址中的数据与ctypes数据类型进行关联,如果C函数内部对传过来的指针地址对应的变量进行修改,最后是ctypes将修改好的C数据类型转为Python类型数据并将其存入之前Python变量对应的内存空间中。
在调用ctypes时,程序的内存空间其实可以分为Python数据内存空间与C数据类型空间。ctypes定义的数据类型就是提供了一个Python数据类型与C数据类型转换的对应关系。ctypes定义的数据类型都是需要和Python数据类型关联的,在调用C函数的时候在实时的转为C数据类型。其中,Python数据类型存在与Python数据内存空间中,C数据类型存在与C数据内存空间中。
需要注意的一点是,一般情况下C数据内存空间是实时开辟的,用完就及时自动销毁的,当然也有特例,那就是numpy定义的array类型变量等, numpy定义的数据类型其实就是一种经过包装的C数据类型,当然numpy定义的array等类型变量存在于C数据内存空间中,而numpy下的array是可以持续存在的,不会自动销毁。
给出Python官方给出的 ctypes 使用说明:
https://docs.python.org/zh-cn/3/library/ctypes.html
=================================================================
举例说明Python变量与Python数据内存空间的关系:
Python 变量a:
a变量------------>对应内存地址空间(13521458792)-------------------------->该空间存储的Python数据为Python类型的999。
上面的关系是由定义 a=999 生成的, 其中id(a)=13521458792 。
这篇关于python 中 ctypes 的使用尝试的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程