2014-07-21 12 views
11

Chciałbym użyć docstringu lub czegoś podobnego do udokumentowania moich rutynowych procedur, które mogą być użyte przy pomocy polecenia Pythona. Samogeneracja docstruń utworzonych przez f2py jest bardzo niewystarczająca i muszę dodać więcej szczegółów w taki sam sposób, jak robimy to przy pomocy funkcji Pythona.Jak dokumentować funkcję forran dla f2py?

W moim pomysłem, powinno to wyglądać tak:

mymod.f:

subroutine foo() 
! This is my function 
end subroutine 

aw sesji Pythona:

>>> import mymod 
>>> help(mymod.foo) 
+1

Nie widzę powodu, dla którego to pytanie powoduje spadek głosów i głosów do zamknięcia. Jak dostosować docstring funkcji generowanej przez f2py brzmi jak dobre pytanie do mnie. –

+1

Nie widzę też, dlaczego chcą zamknąć to pytanie. Czy następny może napisać komentarz do wyjaśnienia? – Sigmun

Odpowiedz

3

Nieco brudny rozwiązaniem jest, aby zapisać w dokumentacji w plikach ASCII i załaduj je w czasie wykonywania. Dokument f2py jest zakodowany w czasie kompilacji, a opcja modyfikacji go w opakowaniu nie jest do tej pory dostępna (to byłoby miłe!).

Można na przykład napisać plik __init__.py, który ładuje skompilowany moduł f2py _mymodule.so i nadpisuje lub dołącza do ciągów f2py __doc__. ">> mymodule.function?" w ipython działa wtedy, ale zaskakująco ">> help (mymodule.function)" nie działa! (nie mam pojęcia, dlaczego ...)

Poniższy fragment __init__.py pobiera dokumentację przechowywaną w folderze doc/i pliki doc/"nazwa funkcji" .doc, które są powiązane z każdą funkcją. W takim przypadku dokumentacja jest zawsze ładowana, ale można ją również załadować ręcznie.

def load_documentation(): 
    """ 
    Fills the modules __doc__ strings 
    """ 

    import os 
    from . import _mymodule 
    print('loading documentation') 
    docfolder = os.path.abspath(os.path.join(os.path.dirname(__file__), 'doc')) 
    for name,func in _mymodule.__dict__.items(): 
     if callable(func): 
      try: 
       path = os.path.join(docfolder,name.lower()+'.doc') 

       docfile = open(path) 
       doc = docfile.read() 
       docfile.close() 

       func.__doc__ = doc 
      except IOError as msg: 
       print(msg) 

load_documentation() 

from _mymodule import *