Python中的C样式指针,对吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python中的C样式指针,对吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1794字,纯文字阅读大概需要3分钟。
内容图文
![Python中的C样式指针,对吗?](/upload/InfoBanner/zyjiaocheng/675/fdf7f11d92a94284a33c369ff193ba80.jpg)
我正在尝试将C应用程序移植到Python,并且有很多指针.这些是否相等:
obj->position = (float*) malloc(obj->totalItems * obj->xyz * sizeof (float));
for (i = 0; i < components; i++) {
obj->comps[i].position = obj->position + obj->pOffset; // Pointer arithmetic
obj->pOffset += obj->comps[i].items * obj->xyz;
}
和
for i in range(self.totalItems * self.xyz):
self.position.append(0.0)
for i in range(self.components):
self.comps[i].position = self.position[self.pOffset:] # Position was a C pointer
self.pOffset += self.comps[i].items * self.xyz
我知道Python对象是通过引用传递的,所以我想知道是否:
self.comps[N].position = [1,2,3,4]
将更改以下内容的一部分:
self.position[]
解决方法:
也许是这样的:
self.position = [0.0 for _ in self.total_items * self.xyz]
for i in range(self.components):
self.comps[i].position = self.p_offset
self.p_offset += self.comps[i].items
在Python中,您可以更改类实例变量中的值.这称为“变异”实例.如果该类不允许这样做,则为“不可变”类;如果允许,则为“可变”类.字符串和整数一样是不可变的,但列表是可变的.
在Python中,我无法想到获得对列表中间部分的引用.列表是可变的:可以将其插入,删除等.引用应该怎么做?
因此,您应该只存储偏移量,然后在需要引用列表中的该点时,使用偏移量为列表建立索引,而不是进行指针数学运算并存储对列表中某个点的引用.
对于您的特定问题:
self.comps[N].position = [1,2,3,4]
这将重新绑定self.comps [N]对象内的名称位置,使其现在指向具有值[1、2、3、4]的新创建的列表实例,并且完全不会影响self.position.但是,如果仅将self.comps [i] .position设置为索引值,则可以使用以下代码:
i = self.comps[N].position
lst = [1, 2, 3, 4]
self.position[i:i+len(lst)] = lst
这将在self.position列表中使用“切片”来替换值.
请注意,如果您使用SciPy甚至仅使用NumPy,则可以定义一个不是动态的numpy.array.您可以使用“视图”获取对列表的一部分的引用.您可能需要调查一下,尤其是在处理非常大的数组或矩阵时.
内容总结
以上是互联网集市为您收集整理的Python中的C样式指针,对吗?全部内容,希望文章能够帮你解决Python中的C样式指针,对吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。