这段 Python 代码是一种类型转换吗?如果是,那么幕后到底发生了什么?

问题描述 投票:0回答:1

我正在编辑一些包含以下行的 Python 代码:

arr = (c_double * len(self.static_mapped[0, :]))(*self.static_mapped[0, :])

其中字段

self.static_mapped
是使用
numpy.zeros
创建的,并且
c_double
是从
ctypes
导入的。

根据上下文,我假设这是从 numpy 双精度型到 C 型双精度型的类型转换,但这种语法没有出现在我查阅过的任何 Python 指南中,甚至我的 IDE 也抱怨“'int ' 对象不可调用”。

我对其含义的解释正确吗?幕后发生的函数调用顺序是什么?这是 Python 中众所周知的代码习惯用法,还是有更标准/直接的方法来实现此目的?

python numpy ctypes idioms
1个回答
0
投票

严格从语法角度来看,您的代码应该相当于

t = c_double * len(self.static_mapped[0, :])
arr = t(*self.static_mapped[0, :])

这意味着

c_double.__mul__
被重写以生成一些其他类型的对象,该对象被调用以生成数组。没有类型转换,只有动态类型生成

© www.soinside.com 2019 - 2024. All rights reserved.