(续) python 中 ctypes 的使用尝试
内容接前文:
https://www.cnblogs.com/devilmaycry812839668/p/15032493.html
=============================================================
再一次更正前面的理解,看了文章, https://zhuanlan.zhihu.com/p/124994344又有了新的理解。
从文章(https://zhuanlan.zhihu.com/p/124994344)可以知道其实Python基本数据类型是在C类型数据上进行包装的,也就是使用结构体在一层上面再套一层,如果这么说的话前文个人的观点就是错误的,在这种角度看调用C语言的动态链接库完全可以在Python类型数据上进行操作,这时我们只需要找到Python数据类型下的C类型数据即可。
前文认为的ctypes定义的数据类型是一种翻译,是一种关系映射,这一点还是没有问题的,只不过它不是在C语言内存空间下再次生成C类型数据,而是在Python数据类型下找到被包装起来的可以进行C语言库函数操作的数据类型,因为Python数据类型是在兼容C类型数据的基础上进行再次包装的。
换句话说Python数据类型是在C数据类型上进行包装的,而ctypes是对Python数据类型进行再次包装,而这次包装的目的是要把被隐藏起的C数据类型暴露出来。
ctypes包装后的数据类型和被包装的Python数据类型是共享同一内存空间的,同时这部分内存空间是兼容C数据类型的,是可以调用C语言函数进行操作的。
所以前文说的调用C语言下的动态链接库中的函数是会自动在C类型内存空间中创建数据的观点是站不住的,因此这里我们更相信是ctypes把Python数据类型中包装的兼容C语言操作的数据类型或是对应的变量内存空间暴露出来,然后使Python函数和C函数都可以对这部分内存空间或是变量进行操作。
=============================================================
重点参考文章:
https://zhuanlan.zhihu.com/p/124994344
(续) python 中 ctypes 的使用尝试的更多相关文章
- 使用ctypes在Python中调用C++动态库
使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #in ...
- python中使用ctypes调用MinGW生成的动态链接库(dll)
关于gcc编译dll的我就不说了,网上举例一大堆,下面以g++为例. 假设有一个test.cpp文件如下: extern "C" { __declspec(dllexport) d ...
- python中使用 C 类型的数组以及ctypes 的用法
Python 在 ctypes 中为我们提供了类似C语言的数据类型, 它的用途(我理解的)可能是: (1) 与 其他语言(如 C.Delphi 等)写的动态连接库DLL 进行交换数据,因为 pytho ...
- 孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录
孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...
- 自学Python三 Python中的屠龙刀(续)
装饰器: 在函数代码功能运行期间动态增加功能的方式叫做装饰器(Decorator).它对一个函数或者类进行再加工. 我们先定义两个函数,一个计算两数和,一个计算两数差. >>> de ...
- 自学Python二 Python中的屠龙刀(续)
函数 秉承着一切皆对象的理念,函数作为对象,可以为其赋值新的对象名,也可以作为参数传递给其他函数! 正常的诸如空函数,默认参数等等我们就不提了,在这里着重提一下默认参数里面的坑和lambda函数. 当 ...
- 精通 Oracle+Python,第 9 部分:Jython 和 IronPython — 在 Python 中使用 JDBC 和 ODP.NET
成功的编程语言总是会成为顶级开发平台.对于 Python 和世界上的两个顶级编程环境 Java 和 Microsoft .NET 来说的确如此. 虽然人们因为 Python 能够快速组装不同的软件组件 ...
- python中的collections
python中有大量的内置模块,很多是属于特定开发的功能性模块,但collections是属于对基础数据的类型的补充模块,因此,在日常代码中使用频率更高一些,值得做个笔记,本文只做主要关键字介绍,详细 ...
- Python爬虫学习(4): python中re模块中的向后引用以及零宽断言
使用小括号的时候,还有很多特定用途的语法.下面列出了最常用的一些: 表4.常用分组语法 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>e ...
- 如何在Python中实现这五类强大的概率分布
R编程语言已经成为统计分析中的事实标准.但在这篇文章中,我将告诉你在Python中实现统计学概念会是如此容易.我要使用Python实现一些离散和连续的概率分布.虽然我不会讨论这些分布的数学细节,但我会 ...
随机推荐
- C#.NET 使用Windows证书库中的证书
public static X509Certificate2 GetCertificate(string commonName, StoreName storeName) { X509Certific ...
- 判断日期是否为周六周日,BigDecimal比较大小
判断日期是否为周六周日,BigDecimal比较大小 package com.example.core.mydemo.date; import java.math.BigDecimal; import ...
- 一文了解Spark引擎的优势及应用场景
Spark引擎诞生的背景 Spark的发展历程可以追溯到2009年,由加州大学伯克利分校的AMPLab研究团队发起.成为Apache软件基金会的孵化项目后,于2012年发布了第一个稳定版本. 以下是S ...
- 什么是Web3.0,和区块链又有什么关系?
又是一个莫名其妙的词语的新起-.- 我大致归纳为以下几个点 什么是web3.0 Web 3.0(Web3)是下一代互联网的发展方向,旨在创建一个更加去中心化.用户控制和数据保护的网络环境.与之前的We ...
- Shell依次输出1,2,3...
个人觉得,Shell没有其他语言方便,同样是脚本语言,我更倾向于Python. Shell怎么输出1,2,3,4类似的递增数列呢? #!/bin/bash i=0 while [ $i -le 100 ...
- 【译】Visual Studio 2022 - 17.10 性能增强
我们很高兴地宣布 Visual Studio 2022 的最新更新,它为您带来了 IDE 各个领域的一系列性能增强.在这篇博客中,我们将重点介绍17.10版本中一些最显著的改进,比如更快的 Windo ...
- 基于Python和TensorFlow实现BERT模型应用
本文分享自华为云社区<使用Python实现深度学习模型:BERT模型教程>,作者: Echo_Wish. BERT(Bidirectional Encoder Representation ...
- cv2 判断图片是冷还是暖
把图片的颜色空间转为HSV H表示色调(下图横轴), 图片的平均H值可用于区分冷暖
- Linux 内核:initcall机制与module_init
Linux 内核:initcall机制与module_init 背景 在做分享的时候,被资深的同事问起关于驱动加载时机与probe的问题.发现自己并不熟悉,因此学习了解一下. 学习本文你就可以知道,内 ...
- 使用Swig转换C++到别的编程语言
项目github地址: aoce 设定aoce能分别与UE4/Unity3D/android demo对接,就这三来看,分别是C++/C#/java三种语言. C++导出给别的语言使用,一般来说,分为 ...