请看示例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])
以上都是官方的示例