Эта страница документации scipy о F2Py гласит:
[Функции обратного вызова] также могут быть явно установлены в модуле. Тогда нет необходимости передавать функцию в списке аргументов в функцию Fortran. Это может понадобиться, если функция Fortran, вызывающая функцию обратного вызова python, сама вызывается другой функцией Fortran.
Однако я не могу найти пример того, как это будет сделано.
Рассмотрим следующую комбинацию Fortran/Python:
test.f:
subroutine test(py_func)
use iso_fortran_env, only stdout => output_unit
!f2py intent(callback) py_func
external py_func
integer py_func
!f2py integer y,x
!f2py y = py_func(x)
integer :: a
integer :: b
a = 12
write(stdout, *) a
end subroutine
call_test.py:
import test
def func(x):
return x * 2
test.test(func)
Скомпилировано с помощью следующей команды (компилятор Intel):
python f2py.py -c test.f --fcompiler=intelvem -m test
Какие изменения мне нужно было бы внести, чтобы представить func
всей программе на Фортране в виде модуля, чтобы я мог вызывать функцию из подпрограммы test
или любой другой подпрограммы в любом другом файле на фортране в проекте?