2014-02-17 3 views
5

This scipy documentation page는 상태 모듈에 사용 포트란 파이썬 콜백을 노출시키는 방법F2Py 약

[콜백 함수 또한 명시 모듈에서 설정 될 수있다. 그런 다음 인수 목록의 함수를 포트란 함수로 전달할 필요는 없습니다. 파이썬 콜백 함수를 호출하는 Fortran 함수 자체가 다른 Fortran 함수에 의해 호출되는 경우에는이 방법이 바람직 할 수 있습니다.

그러나 나는 이것이 어떻게 수행 될지 예를 찾을 수 없습니다.

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) 

다음 명령을 사용하여 컴파일 (인텔 컴파일러

는 다음 포트란/파이썬 조합을 고려) :

,
python f2py.py -c test.f --fcompiler=intelvem -m test 

나는 서브 루틴 test 또는 다른 포트란 파일의 다른 서브 루틴의 내부에서 함수를 호출 할 수 있도록, 모듈의 형태로 전체 포트란 프로그램 func을 노출하기 위해 수행해야 할 것입니다 어떤 변화가 프로젝트?

+0

여기에 도움을 모듈의 코드를합니까 : 나는 모든 파일/기능에 다음과 같은 선언하지 않고도 호출 할 수 있도록 AS를

subroutine test() use iso_fortran_env, only stdout => output_unit !f2py intent(callback) py_func external py_func integer py_func integer y,x !f2py y = py_func(x) integer :: a integer :: b a = 12 write(stdout, *) a end subroutine 

옆으로, 그때 내가 그것을 사용하는 서브 루틴에 py_func 포장 ? https://code.google.com/p/f2py/wiki/FAQ2ed 파이썬 모듈인지 포트란 모듈인지 조금 혼란 스럽지만 새 모듈이 만들어진 것처럼 보입니다. –

+0

죄송합니다,이 질문에 대한 답변을 추가하는 것을 잊어 버렸습니다. 귀하의 의견은 나에게 상기시켜주었습니다. 아래를 참조하십시오. – JimmidyJoo

답변

2

다음은 저에게 효과적입니다. 테스트에 전달 된 매개 변수가 없다는 것에 유의하십시오. 파이썬 파일은 질문에 언급 된 것과 같습니다.

integer y 
y = py_func(x)