F2PY用户b指南b和参考b手册b_第1页
F2PY用户b指南b和参考b手册b_第2页
F2PY用户b指南b和参考b手册b_第3页
F2PY用户b指南b和参考b手册b_第4页
F2PY用户b指南b和参考b手册b_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Author:Contact:作 Web site:Date:Revision:翻译:Email:Blog:译日期:者版本F2PY用户指南和参考手册PearuPetersonpearucens.ioc.ee:cens.ioc.ee/projects/f2py2e/2005-01-301.25cpythonercpythonergmailcpython.bloggoing2005-03-101.25-1、"r",-Ph贝献者目录1 引言12 三种封装方法开始12.1 快速方法22.2 聪明方法32.3 既快且聪明的方法43 签名文件53.1 Pythonmoduleblock

2、63.2 Fortran/C例程签名63.2.1 类型声明Typedeclarations73.2.2 语句Statements73.2.3Attributes103.3 扩展143.3.1 F2PY指令143.3.2 C语言表达式143.3.3 Multilineblocks154在Python中使用绑定161.1 标量参数或数值参数171.2 字符串参数181.3 数组参数191.4 回调参数221.5 monblocks251.6 Fortran90moduledata261.6.1 Allocatablearrays275 使用F2PY285.1 命令f2py285.2 Pythonm

3、odulef2py2e326 使用scipy_distutils336.1 cipy_distutils0.2.2与更高版本346.25 cipy_distutilspre0.2.2357F2PY的扩展用法357.1 向F2PY产生的模块中添加自写的函数357.2 修改F2PY生成模块的字典36引言F2PYFortrantoPythoninterfacegenerator项目的目的是要在Python和Fortran语言之间提供一个连接。F2PY是一个Python包包含一个命令行工具f2py和一个模块f2py2e,用来建立PythonC/API扩展模块,从而能够:?调用Fortran77/90/

4、95外部子程序、Fortran90/95模块子程序以与C函数;?访问Fortran77MONblocks和Fortran90/95module数据,包括allocatablearrays。2三种封装方法开始用F2PY把Fortran或C函数封装成Python包括下列步骤:?创建签名文件,包含:对Fortran或C函数封装器的描述,也称为函数签名。在Fortranroutines的情况下,F2PY通过扫描Fortran源码,从而收集创建函数封装器所需要的所有相关信息。?可选编辑F2PY所创建的签名文件,以优化函数封装器,使之更“聪明、更加“Python化。?F2PY读取签名文件,生成一个Pyth

5、onC/API模块,该模块包含Fortran/C/Python绑定信息。?F2PY编译所有的源文件,建立包含封装器的扩展模块。在建立扩展模块时,F2PY使用了scipy_distutils包,它支持大量的Fortran编译器。上述步骤可以在一条命令中执行,也可以一步一步顺序执行,其中某些步骤可以忽略或者同其它步骤组合使用,视具体情况而定。下面介绍3种使用F2PY的典型方法。以下面的Fortran77代码为例说明。CFILE:FIB1.FSUBROUTINEFIB(A,N)CCCALCULATEFIRSTNFIBONACCINUMBERSCINTEGERNREAL*8A(N)DOI=1,NIF(

6、I.EQ.1)THENA(I)=0.0D0ELSEIF(I.EQ.2)THENA(I)=1.0D0ELSEA(I)=A(I-1)+A(I-2)ENDIFENDDOENDCENDFILEFIB1.F2.1快速方法把Fortran子程序FIB封装为Python函数的最快的方法是运行:F2py-cfib1.f-mfib1该命令在当前目录下建立一个扩展模块fib1.pydo现在,在Python中就可以访问Fortran子程序FIB了:>>>importNumeric>>>importfib1>>>printfib1.fib._doc_fib-Fun

7、ctionsignature:fib(a,n)Requiredarguments:a:inputrank-1array('d')withbounds(n)Optionalarguments:n:=len(a)inputint>>>a=Numeric.zeros(8,'d')>>>fib1.fib(a)>>>printa.3.注:?F2PY发现第2个参数n是第一个数组参数的维数,因为缺省情况下所有参数都是input-only的,因此F2PY得出结论,n是可选参数,它的缺省值为len(

8、a)。?对于可选参数n,可以使用不同的值。>>>a1=Numeric.zeros(8,'d')>>>fib1.fib(a1,6)>>>printa..但当它和数组参数a不相容时,会抛出一个异常:>>>fib1.fib(a,10)fib:n=10Traceback(mostrecentcalllast):File"<stdin>",line1,in?fib.error:(len(a)>=n)failedfor1stkeywordn>&g

9、t;>这说明F2PY具有一个有用的特征,即,F2PY对相关参数间的相容性进行初步的检查,以避免不可预期的崩溃。?当使用Numericarray作为输入数组参数时,C指针会被直接传给Fortran。否则,F2PY就复制输入数组,然后将副本的C指针传给Fortran子程序。结果,Fortran子程序对输入数组的任何改变都不会影响原先的参数。示例如下:>>>a=Numeric.ones(8,'i')>>>fibl.fib(a)>>>printa11111111这显然不是我们所期望的结果。F2PY提供了intent(inpla

10、ce)属性,它能改变输入数组的属性,使得Fortran例程所作的任何改变都对输入参数有效。例如,如果你指定intent(inplace)a,上面的例子就会变为:,>>>a=Numeric.ones(8,'i')>>>fib1.fib(a)>>>printa.3.然而,推荐使用intent(out)属性,来把fortran例程所作的改变反馈给python,这个方案更有效、更清晰。?在python中使用Fib1.fib与在Fortran中使用FIB非常相似。然而,在python中使用insituout

11、put参数是不太好的风格,因为python没有安全机制处理错误的参数类型。当使用Fortran和C时,编译器在编译期间就会发现类型不匹配,而python必须在运行期间才进行类型检查。因此,在python中使用insituoutput参数会使查找bug变得困难,更不要说在进行必须的类型检查时代码可读性差了。虽然前面演示的封装方法非常简单易懂,但它有几个缺点,这都归因于F2PY无法确定参数的实际目的一一它是输入参数还是输出参数,还是既为输入又为输出,又或其它?因此,F2PY假定在缺省情况下所有参数都是输入参数。实际上,有办法让F2PY知道函数参数的实际目的,然后产生更加Python化的封装器。2.

12、2 聪明方法让我们按照下面步骤封装Fortran函数。?首先,运行命令f2pyfib1.f-mfib2-hfib1.pyf创建签名文件,保存为fib1.pyf,其内容如下:!-*-f90-*-pythonmodulefib2!ininterface!in:fib2subroutinefib(a,n)!in:fib2:fib1.freal*8dimension(n):aintegeroptional,check(len(a)>=n),depend(a):n=len(a)endsubroutinefibendinterfaceendpythonmodulefib2!Thisfilewasau

13、to-generatedwithf2py(version:2.28.198-1366).!See:cens.ioc.ee/projects/f2py2e/?接着,告诉F2PY参数n是一个输入参数使用intent(in)属性,调用Fortran函数FIB所产生的结果应该返回给python使用intent(out)属性o止匕外,数组a应该根据输入参数n动态创建使用depend(n)属性以说明依赖关系。修改后的fib1.pyf另存为fib2.pyf内容如下:!-*-f90-*-pythonmodulefib2interfacesubroutinefib(a,n)real*8dimension(n),

14、intent(out),depend(n):aintegerintent(in):nendsubroutinefibendinterfaceendpythonmodulefib2?最后,运行f2py-cfib2.pyffib1.f建立扩展模块Inpython:> >>importfib2> >>printfib2.fib._doc_fib-Functionsignature:a=fib(n)Requiredarguments:n:inputintReturnobjects:a:rank-1array('d')withbounds(n)>

15、 >>printfib2.fib(8).3.注释:?很明显,fib2.fib更符合Fortran子程序FIB的目的,给定n,fib2.fib返回一个前n个菲波拉契数的Numericarray。新的python签名fib2.fib也消除了签名fib1.fib时遇到的那种令人惊讶的现象。?注意,在缺省情况下,单独使用intent(out)也隐含了intent(hide)Intent(hide)属性指定的参数不出现在封装器函数的参数列表中。2.3 既快且聪明的方法聪明的方法适合封装那些不能修改的Fortran代码比如,第三方的代码然而,Fortran代码如果可

16、以编辑,则在多数情况下可以跳过生成中间签名文件这一步。也就是说,可以使用F2PY指令将F2PY所特有的属性直接插入到Fortran源代码中。F2PY指令是一条特别的注释行,Fortran编译器忽略它,但F2PY会像普通行那样进行处理。下面是修改后的Fortran源代码,保存为fib3.f:CFILE:FIB3.FSUBROUTINEFIB(A,N)CCCALCULATEFIRSTNFIBONACCINUMBERSCINTEGERNREAL*8A(N)Cf2pyintent(in)nCf2pyintent(out)aCf2pydepend(n)aDOI=1,NIF(I.EQ.1)THENA(I)

17、=0.0D0ELSEIF(I.EQ.2)THENA(I)=1.0D0ELSEA(I)=A(I-1)+A(I-2)ENDIFENDDOENDCENDFILEFIB3.F现在,可以运行f2py-c-mfib3fib3.f创建扩展模块。注意封装器函数FIB同前面例子一样“聪明:> >>importfib3> >>printfib3fb._doc_fib-Functionsignature:a=fib(n)Requiredarguments:n:inputintReturnobjects:a:rank-1array('d')withbounds(n)

18、> >>printfib3.fib(8)> .3.3签名文件签名文件.pyf文件的语法借自于Fortran90/95语言规范,它几乎能够理解Fortran90/95所有的标准结构,包括free和fixedformat。F2PY还对Fortran90/95语言规范作了一些扩展,以帮助设计Fortran到Python的接口,使之更Python化Pythonic。签名文件可以包含任意Fortran代码因此,Fortran代码可以看作是签名文件。对于那些与建立接口无关的Fortran结构,F2PY只是将之忽略掉,这其中也包括语法错误。因此,要注意不要

19、有任何的语法错误So,becarefulnotmakingones。签名文件的内容通常是大小写敏感的,在扫描Fortran代码生成签名文件时,F2PY自动将字符转换为小写。在multi-lineblocks中的代码或使用-no-lower选项时除外。3.1 Pythonmoduleblock签名文件包含一个推荐或多个pythonmoduleblocks。Pythonmoduleblocks用来描述F2PY所生成的Python/C扩展模块<modulename>module.c的内容。如果<modulename>包含子字符用_user_,贝相应的pythonmoduleb

20、lock描述的是回调函数的签名。Pythonmoduleblock结构如下:pythonmodule<modulename><erface<usercodestatement><Fortranblockdatasignatures<Fortran/Croutinesignatures>erfacemodule<F90modulename><F90moduledatatypedeclarations><F90moduleroutinesignat

21、ures>endmodule<F90modulename>endinterface.endpythonmodule<modulename>内为可选部分,表示一个或多个前面部分3.2 Fortran/C例程签名Fortran例程签名的结构如下:<typespec>function|subroutine<routinename>(<arguments>)result(<entityname>)<argument/variabletypedeclarations><argument/variableatt

22、ributestatements><usestatements><monblockstatements><otherstatements>endfunction|subroutine<routinename>F2PY根据例程签名产生如下的Python/C扩展函数:def<routinename>(<requiredarguments>,<optionalarguments):.return<returnvariables>Fortranblockdata的签名结构如下:blockdata<bl

23、ockdataname><variabletypedeclarations><variableattributestatements><usestatements><monblockstatements>includestatementsendblockdatablockdataname3.2.1 类型声明Typedeclarations参数/变量的类型声明部分定义如下:<typespec><attrspec>:<entitydecl>这里<typespec>:=byte|character&

24、lt;charselector>|plex<kindselector>|real<kindselector>|doubleplex|doubleprecision|integer<kindselector>|logical<kindselector><charselector>:=*<charlen>|(len=<len>,kind=<kind>)|(kind=<kind>,len=<len>)<kindselector>:=*<intlen>|

25、(kind=<kind>)<entitydecl>:=<name>*<charlen>(<arrayspec>)|(<arrayspec>)*<charlen>|/<init_expr>/|=<init_expr>,<entitydecl>其中?<attrspec>是用逗号分隔的属性列表;?<arrayspec>是用逗号分隔的维数边界列表;?<init_expr>是C表达式?对整数类型而言,<intlen>可以是负整数,这时in

26、teger*<negintlen>表示unsignedCintegers.如果某个参数没有<argumenttypedeclaration>,其类型由参数名的隐含规则决定。3.2.2 语句Statements?Attributestatements:<argument/variableattributestatement>是没有<typespec>的<argument/variabletypedeclaration>。另外,在anattributestatement中不能useotherattributes,<entitydec

27、l>也只能是alistofnames.?Usestatements:<usestatement>部分的定义是:use<modulename>,<rename_list>|,ONLY:<only_list>这里<rename_list>:=<local_name>=><use_name>,<rename_list>目前,usestatement只用于连接回调模块call-backmodules和外部参数(回调函数),参见Call-backarguments.?monblockstateme

28、nts:<monblockstatement部分的定义是:mon/<monname>/<shortentitydecl>其中<shortentitydecl>:=<name>(<arrayspec>),<shortentitydecl>一个pythonmoduleblock不应包含二个或二个以上的同名monblocks,否则,后面的monblocks将会被忽略。<shortentitydecl>中的变量类型用argumenttypedeclarations定义。要注意的是相应的argumenttypede

29、clarations可能包含arrayspecifications,这样的话就不必在<shortentitydecl>指定了。?Otherstatements:<otherstatement>部分是指所有前面未提到的其它Fortran语言结构,除了以下情况外,F2PY都予以忽略不作处理。callstatementsandfunctioncallsofexternalarguments(moredetails?);includestatementsinclude'<filename>'include"<filename>&

30、quot;如果文件<filename>不存在,则忽略该includestatement,否贝文件<filename>isincludedtoasignaturefile.includestatements能在签名文件的任意部分使用,在Fortran/Croutinesignatureblocks的外面也可以使用。implicitstatementsimplicitnoneimplicit<listofimplicitmaps>where<implicitmap>:=<typespec>(<listoflettersorrange

31、ofletters>)如果未用<variabletypedeclaration>声明变量类型,则用隐含规则确定变量类型。缺省隐含规则给定如下:implicitreal(a-h,o-z,$_),integer(i-m)entrystatementsentry<entryname>(<arguments>)F2PYgenerateswrapperstoallentrynamesusingthesignatureoftheroutineblock.技巧:entrystatementcanbeusedtodescribethesignatureofanarbi

32、traryroutineallowingF2PYtogenerateanumberofwrappersfromonlyoneroutineblocksignature.Therearefewrestrictionswhiledoingthis:fortrannamecannotbeused,callstatementandcallprotoargumentcanbeusedonlyiftheyarevalidforallentryroutines,etc.止匕外,F2PY还引入了下列statements:threadsafeUsePy_BEGIN_ALLOW_THREADS.Py_END_AL

33、LOW_THREADSblockaroundthecalltoFortran/Cfunction.callstatement<C-expr|multi-lineblock>ReplaceF2PYgeneratedcallstatementtoFortran/Cfunctionwith<C-expr|multi-lineblock>.ThewrappedFortran/Cfunctionisavailableas(*f2py_func).Toraiseanexception,setf2py_success=0in<C-expr|multi-lineblock>

34、.callprotoargument<C-typespecs>WhencallstatementstatementisusedthenF2PYmaynotgenerateproperprototypesforFortran/Cfunctions(because<C-expr>maycontainanyfunctioncallsandF2PYhasnowaytodeterminewhatshouldbetheproperprototype).Withthisstatementyoucanexplicitelyspecifytheargumentsofthecorrespo

35、ndingprototype:extern<returntype>FUNC_F(<routinename>,<ROUTINENAME>)(<callprotoargument>);fortranname<acctualFortran/Croutinename>Youcanusearbitrary<routinename>foragivenFortran/Cfunction.Thenyouhavetospecify<acctualFortran/Croutinename>withthisstatement.Iff

36、ortrannamestatementisusedwithout<acctualFortran/Croutinename>thenadummywrapperisgenerated.usercode<multi-lineblock>Whenusedinsidepythonmoduleblock,thengivenCcodewillbeinsertedtogeneratedC/APIsourcejustbeforewrapperfunctiondefinitions.HereyoucandefinearbitraryCfunctionstobeusedininitializ

37、ationofoptionalarguments,forexample.Ifusercodeisusedtwiseinsidepythonmoduleblockthenthesecondmulti-lineblockisinsertedafterthedefinitionofexternalroutines.Whenusedinside<routinesingature>,thengivenCcodewillbeinsertedtothecorrespondingwrapperfunctionjustafterdeclaringvariablesbutbeforeanyCstate

38、ments.So,usercodefollow-upcancontainbothdeclarationsandCstatements.Whenusedinsidethefirstinterfaceblock,thengivenCcodewillbeinsertedattheendoftheinitializationfunctionoftheextensionmodule.Hereyoucanmodifyextensionmodulesdictionary.Forexample,fordefiningadditionalvariablesetc.pymethoddef<multi-lin

39、eblock>MultilineblockwillbeinsertedtothedefinitionofmodulemethodsPyMethodDef-array.Itmustbeama-separatedlistofCarrays(seeExtendingandEmbeddingPythondocumentationfordetails).pymethoddefstatementcanbeusedonlyinsidepythonmoduleblock.3.2.3 AttributesF2PY使用了下列属性:?可选optional相应的参数被移到<optionalargument

40、s列表的末尾。可选参数的缺省值由<init_expr>指定,请参见entitydecl的定义。缺省值必须是有效的C语言表达式。在使用<init_expr>时,F2PY自动设为可选属性。可选数组参数的所有维数都必须是有界的。?必须Crequired相应的参数被视为必须的参数,这是缺省属性,只有当使用了<init_expr>,而你又要禁用自动optional设置时,才需要指定required0如果PythonNoneobject被设置为requiredargument,则该参数被视为可选的。就是说,inthecaseofarrayargument,thememo

41、ryisallocated.Andif<init_expr>isgiven,thecorrespondinginitializationiscarriedout.?dimension(<arrayspec>)相应的变量视为数组,其维数由<arrayspec>指定。?intent(<intentspec>)Thisspecifiesthe"intention"ofthecorrespondingargument.<intentspec>isamaseparatedlistofthefollowingkeys:inTh

42、eargumentisconsideredasaninput-onlyargument.参数值传给Fortran/Cfunction,该函数不能改变参数的值。inoutTheargumentisconsideredasaninput/ent(inout)argumentscanbeonly"contiguous"Numericarrayswithpropertypeandsize.Here"contiguous"canbeeitherinFortranorCsense.Thelatteron

43、ecoincideswiththecontiguousconceptusedinNumericandiseffectiveonlyifintent(c)isused.Fortran-contiguousnessisassumedbydefault.See also通常不推荐使用intent(inout),而代之以intent(in,out)。intent(inplace)attribute.inplaceTheargumentisconsideredasaninput/ent(inplace)argumentsmustbeNume

44、ricarrayswithpropersize.Ifthetypeofanarrayisnot"proper"orthearrayisnon-contiguousthenthearraywillbechangedin-placetofixthetypeandmakeitcontiguous.通常也不推荐使用intent(inplace).Forexample,whensliceshavebeentakenfromanintent(inplace)argumentthenafterin-placechanges,slicesdatapointersmaypointtounal

45、locatedmemoryarea.outTheargumentisconsideredasanreturnvariable.Itisappendedtothe<returnedvariables>list.Usingintent(out)setsintent(hide)automatically,unlessalsointent(in)orintent(inout)wereused.缺省情况下,返回的多维数组是Fortran-contiguous。如果使用了intent(c),则返回的多维数组则是C-contiguous。hideTheargumentisremovedfromt

46、helistofrequiredoroptionalarguments.Typicallyintent(hide)isusedwithintent(out)orwhen<init_expr>pletelydeterminesthevalueoftheargumentlikeinthefollowingexample:integerintent(hide),depend(a):n=len(a)realintent(in),dimension(n):aTheargumentistreatedasaCscalarorCarrayargument.Inthecaseofascalararg

47、ument,itsvalueispassedtoCfunctionasaCscalarargument(recallthatFortranscalarargumentsareactuallyCpointerarguments).Inthecaseofanarrayargument,thewrapperfunctionisassumedtotreatmulti-dimensionalarraysasC-contiguousarrays.Thereisnoneedtouseintent(c)forone-dimensionalarrays,nomatterifthewrappedfunctioni

48、seitheraFortranoraCfunction.ThisisbecausetheconceptsofFortran-andC-contiguousnessoverlapinone-dimensionalcases.Ifintent(c)isusedasanstatementbutwithoutentitydeclarationlist,thenF2PYaddsintent(c)attibutetoallarguments.Also,whenwrappingCfunctions,onemustuseintent(c)attributefor<routinename>inord

49、ertodisableFortranspecificF_FUNC(.,.)macros.cacheTheargumentistreatedasajunkofmemory.NoFortrannorCcontiguousnesschecksarecarriedout.Usingintent(cache)makessenseonlyforarrayarguments,alsoinconnectionwithintent(hide)oroptionalattributes.copyEnsurethattheoriginalcontentsofintent(in)argumentispreserved.

50、Typicallyusedinconnectionwithintent(in,out)attribute.F2PYcreatesanoptionalargumentoverwrite_<argumentname>withthedefaultvalue0.overwriteTheoriginalcontentsoftheintent(in)argumentmaybealteredbytheFortran/Cfunction.F2PYcreatesanoptionalargumentoverwrite_<argumentname>withthedefaultvalue1.o

51、ut=<newname>Replacethereturnnamewith<newname>inthe_doc_stringofawrapperfunction.callbackConstructanexternalfunctionsuitableforcallingPythonfunctionfromFent(callback)mustbespecifiedbeforethecorrespondingexternalstatement.If'argument'isnotinargumentlistthenitwillbeaddedto

52、PythonwrapperbutisnotusedwhencallingFortranfunction.Useintent(callback)insituationswhereaFortran/Ccodeassumesthatauserimplementsafunctionwithgivenprototypeandlinksittoanexecutable.auxDefineauxiliaryCvariableinF2PYgeneratedwrapperfunction.Usefultosaveparametervaluessothattheycanbeaccessedininitializa

53、tionexpressionofothervariables.Notethatintent(aux)silentlyimpliesintent(c).Thefollowingrulesapply:?Ifnointent(in|inout|out|hide)isspecified,intent(in)isassumed.?intent(in,inout)isintent(in).?intent(in,hide)orintent(inout,hide)isintent(hide).?intent(out)isintent(out,hide)unlessintent(in)orintent(inou

54、t)isspecified.?Ifintent(copy)orintent(overwrite)isused,thenanadditionaloptionalargumentisintroducedwithanameoverwrite_<argumentname>andadefaultvalue0or1,respectively.?intent(inout,inplace)isintent(inplace).?intent(in,inplace)isintent(inplace).?check(<C-booleanexpr>)Performconsistencychec

55、kofargumentsbyevaluating<C-booleanexpr;if<C-booleanexpr>returns0,anexceptionisraised.Ifcheck(.)isnotusedthenF2PYgeneratesfewstandardchecks(e.g.inacaseofanarrayargument,checkforthepropershapeandsize)automatically.Usecheck()todisablechecksgeneratedbyF2PY.?depend(卜names>)Thisdeclaresthatthe

56、correspondingargumentdependsonthevaluesofvariablesinthelist<names>.Forexample,<init_expr>mayusethevaluesofotherarguments.Usinginformationgivenbydepend(.)attributes,F2PYensuresthatargumentsareinitializedinaproperorder.Ifdepend(.)attributeisnotusedthenF2PYdeterminesdependencerelationsautom

57、atically.Usedepend()todisabledependencerelationsgeneratedbyF2PY.WhenyoueditdependencerelationsthatwereinitiallygeneratedbyF2PY,becarefulnottobreakthedependencerelationsofotherrelevantvariables.Anotherthingtowatchoutiscyclicdependencies.F2PYisabletodetectcyclicdependencieswhenconstructingwrappersandi

58、tplainsifanyarefound.?allocatableThecorrespondingvariableisFortran90allocatablearraydefinedasFortran90moduledata.?externalThecorrespondingargumentisafunctionprovidedbyuser.Thesignatureofthisso-calledcall-backfunctioncanbedefinedin_user_moduleblock,orbydemonstrative(orreal,ifthesignaturefileisarealFo

59、rtrancode)callinthe<otherstatements>block.Forexample,F2PYgeneratesfromexternalcb_sub,cb_funintegernreala(n),rcallcb_sub(a,n)r=cb_fun(4)thefollowingcall-backsignatures:subroutinecb_sub(a,n)realdimension(n):aintegeroptional,check(len(a)>=n),depend(a)二n=len(a)endsubroutinecb_subfunctioncb_fun(

60、e_4_e)result(r)integer:e_4_ereal:rendfunctioncb_funThecorrespondinguser-providedPythonfunctionarethen:defcb_sub(a,n):.returndefcb_fun(e_4_e):.returnrSeealsointent(callback)attribute.?parameterThecorrespondingvariableisaparameteranditmusthaveafixedvalue.F2PYreplacesallparameteroccurrencesbytheircorrespondingvalues.3.3 扩展3.3.1 F2PY指令F2PY指令允许在Fortran77/90源码中使用F2PY签名文件结构,这个特征能够让你完全跳过生成签名文件这一步,直接对Fortran源码应用F2PY。F2PY指令型式如下:<mentchar>f2py.其中,fixed格式的fortran代码的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论