[英]External function ‘f’ at (1) has no IMPLICIT type in subroutine with f2py
[英]f2py external function always returns zero
我需要对fortran90代码进行python绑定,该代码将回调函数作为其输入之一。 我尝试遵循scipy网页上的示例,并创建了一个helloworld文件helloworld.f90
,如下所示:
SUBROUTINE helloworld(fun,a,b)
external fun
real*8, intent(in) :: a
real*8, intent(out) :: b
print*, 'Hellow world'
print*, a
b = fun(a)
print*, b
END
我用f2py -c -m hello helloworld.f90
编译。 编译工作没有错误,但是python代码无法正常运行:从python进行的函数调用始终返回0(!?):
In [1]: import hello
In [2]: def fun(x): return x**2
In [3]: hello.helloworld(fun,2.)
Hellow world
2.0000000000000000
0.0000000000000000
Out[3]: 0.0
有人知道为什么在fortran中将fun(2.)
评估为0
吗? 我的编译器有问题吗?
我发现了问题...由于所需的8字节精度(为什么?),似乎fortran将python float 2.强制转换为0。 无论如何,在上面的代码中将real*8
更改为real
解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.