Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python C和C类型计算的奇怪行为_Python_C_Ctypes - Fatal编程技术网

Python C和C类型计算的奇怪行为

Python C和C类型计算的奇怪行为,python,c,ctypes,Python,C,Ctypes,我有一个C扩展,它通过ctypes在python中调用。 C代码如下所示: double new(int t){ double sum; sum = (double)t*(double)1.5; return sum; } import ctypes fun = ctypes.CDLL("C:/test.so") fun.new.argtypes = [ctypes.c_int] fun.new.restypes = ctypes.c_double fun.new(2) P

我有一个C扩展,它通过ctypes在python中调用。 C代码如下所示:

double new(int t){
   double sum;
   sum = (double)t*(double)1.5;
   return sum;
}
import ctypes
fun = ctypes.CDLL("C:/test.so")
fun.new.argtypes = [ctypes.c_int]
fun.new.restypes = ctypes.c_double
fun.new(2)
Python代码如下所示:

double new(int t){
   double sum;
   sum = (double)t*(double)1.5;
   return sum;
}
import ctypes
fun = ctypes.CDLL("C:/test.so")
fun.new.argtypes = [ctypes.c_int]
fun.new.restypes = ctypes.c_double
fun.new(2)
因此,人们期望输出为“3.0”,但我得到的输出是“-1398886288”。
我把它分解成这个简单的例子。我的实际应用程序要大得多,但在那里我也得到了一些奇怪的输出。也许我对ctypes有什么错误?

它的拼写是
restype
,而不是
restypes

fun.new.restype = ctypes.c_double
有了这一变化,代码“起作用”。但它不计算“和”,它是一个数字。它还包含不必要的强制转换,并且不必要地分割声明和初始化

以下通常被视为实现此功能的首选方式:

双三分之一(int x){
双结果=x*1.5;
返回结果;
}
或者,如果这就是这个函数的全部内容,请省略不必要的中间变量:

双三分之一(int x){
返回x*1.5;
}

它的拼写是
重新键入
,而不是
重新键入

fun.new.restype = ctypes.c_double
有了这一变化,代码“起作用”。但它不计算“和”,它是一个数字。它还包含不必要的强制转换,并且不必要地分割声明和初始化

以下通常被视为实现此功能的首选方式:

双三分之一(int x){
双结果=x*1.5;
返回结果;
}
或者,如果这就是这个函数的全部内容,请省略不必要的中间变量:

双三分之一(int x){
返回x*1.5;
}

输出打印在哪里?如果需要方括号,如
[ctypes.c_int]
,那么为什么它们不在
ctypes.c_double
附近?(如您所见,我对Python中的ctypes一无所知).OT:调用产品
sum
很奇怪。@PaulOgilvie因为argtypes必须是一个序列,并且只重新键入一个变量。
输出打印在哪里?
问题我想问的是
python
中的打印语句在哪里?输出打印在哪里?如果需要方括号,如
[ctypes.c_int]
,那么为什么它们不存在于
ctypes.c_double
?(如您所见,我对Python中的ctypes一无所知).OT:调用产品
sum
很奇怪。@PaulOgilvie因为argtypes必须是一个序列,并且只重新键入一个变量。
输出打印在哪里?
问题我想问的是
python
代码中打印语句在哪里?天哪****。谢谢。有时候我再也看不到这样的错误了。还有谢谢你的额外建议。我从一个更大的脚本中提取了代码,所以看起来很奇怪。天哪****。谢谢你。有时候我再也看不到这样的错误了。也谢谢你的额外建议。我从一个更大的脚本中提取了代码,所以看起来很奇怪。