2016-08-07 12 views
1

Beim Definieren einer Funktion in reinem Python ist ihre Signatur beim Aufruf von help sichtbar. Zum Beispiel:Angeben der Python-Funktionssignatur in C/API

>>> def hello(name): 
... """Greet somebody.""" 
... print "Hello " + name 
... 
>>> help(hello) 
Help on function hello in module __main__: 

hello(name) 
    Greet somebody. 

>>> 

Wenn eine Python-Funktion in C/API definiert, allerdings fehlt es seine Unterschrift grundlegende Informationen:

static PyObject* 
mod_hello(PyObject* self, PyObject* args) 
{ 
    const char* name; 
    if (!PyArg_ParseTuple(args, "s", &name)) 
     return NULL; 
    printf("Hello %s\n", name); 
    Py_RETURN_NONE; 
} 

static PyMethodDef HelloMethods[] = 
{ 
    {"hello", mod_hello, METH_VARARGS, "Greet somebody."}, 
    {NULL, NULL, 0, NULL} 
}; 

Dies ergibt:

>>> help(hello) 
Help on built-in function hello in module hello: 

hello(...) 
    Greet somebody. 

Irgendwelche Ideen, wie in C/API, um die Signatur von hello(...) zu hello(name) zu ändern?

+3

Ich nehme an, Sie lesen http://StackOverflow.com/Questions/1104823/Python-Creative-Method-Signatures-For-Documentation? – boardrider

Antwort

1

können Sie die Unterschrift enthalten, indem es an die Funktion docstring in einer Weise vorangestellt wird, dass inspect sie extrahieren kann (zumindest für Python arbeitet 3.4+):

static PyMethodDef HelloMethods[] = 
{ 
    {"hello", mod_hello, METH_VARARGS, "hello(name, /)\n--\n\nGreet somebody."}, 
    {NULL, NULL, 0, NULL} 
}; 

Hinweis Ich habe mehr geschrieben komplett Antwort here, die die Regeln und die Mechanik in etwas mehr Tiefe erklären.

Verwandte Themen