我正在编辑一些包含以下行的 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 中众所周知的代码习惯用法,还是有更标准/直接的方法来实现此目的?
严格从语法角度来看,您的代码应该相当于
t = c_double * len(self.static_mapped[0, :])
arr = t(*self.static_mapped[0, :])
这意味着
c_double.__mul__
被重写以生成一些其他类型的对象,该对象被调用以生成数组。没有类型转换,只有动态类型生成。