请看示例F77文件:
C FILE: CALLBACK.F
SUBROUTINE FOO(FUN,R)
EXTERNAL FUN
INTEGER I
REAL*8 R
Cf2py intent(out) r
R = 0D0
DO I=-5,5
R = R + FUN(I)
ENDDO
END
C END OF FILE CALLBACK.F
在DOS窗口输入:
f2py -c -m callback callback.f
下面是测试:
>>> import callback
>>> print callback.foo.__doc__
foo - Function signature:
r = foo(fun,[fun_extra_args])
Required arguments:
fun : call-back function
Optional arguments:
fun_extra_args := () input tuple
Return objects:
r : float
Call-back functions:
def fun(i): return r
Required arguments:
i : input int
Return objects:
r : float
>>> def f(i): return i*i
...
>>> print callback.foo(f)
110.0
>>> print callback.foo(lambda i:1)
11.0
更纤细的说明,请看官方网站:
http://cens.ioc.ee/projects/f2py2e/
可以再看下面的例子:
subroutine calculate(x,n)
cf2py intent(callback) func
external func
c The following lines define the signature of func for F2PY:
cf2py real*8 y
cf2py y = func(y)
c
cf2py intent(in,out,copy) x
integer n,i
real*8 x(n)
do i=1,n
x(i) = func(x(i))
end do
end
在DOS窗口输入:
f2py -c -m foo calculate.f
下面是在Python中测试:
>>> import foo
>>> foo.calculate(range(5), lambda x: x*x)
array([ 0., 1., 4., 9., 16.])
>>> import math
>>> foo.calculate(range(5), math.exp)
array([ 1. , 2.71828175, 7.38905621, 20.08553696, 54.59814835])
以上都是官方的示例