PyDoc_STRVAR( calc__doc__, "calc" ); a další PyDoc_STRVAR – to je makro?METH_VARARGS asi nebude jediný možný způsob sdělení jak předat argumenty, existuje i jiný? Respektive jak předat kwargs, alespoň to by se pro začátek docela hodilo, když ne vícPokusim se odpovedet:
* je to makro. Staci pohodlne pouzivat const char*, obcas ale byvaji problemy s tim ze python ceka holy char* (t.j. pak je treba hnusny const_cast, neb novejsi gcc dela string constants const)
* METH_VARARGS neni jediny. Existuji jeste METH_NOARGS, METH_KEYWORDS (Funkce potom musi byt typu PyCFunctionWithKeywords)
* docstring neni povinny, ale pokud chcete generovat dokumentaci k API, hodi se (napr. epydoc je uziva)
* Neslysel jsem o primem napojeni pythonu a C, ale existuji alternativy, napriklad hojne pouzivany Boost::Python (coz je defakto jenom sada sablon)
1) Ano, PyDoc_STRVAR je makro.
2) Ano, existuje více způsobů. Podívejte se do dokumentace. Naleznete například METH_KEYWORDS, METH_NOARGS, ..
3) Dokumentační řetězec můžeme úplně vynechat, je to nepovinný. Tedy například stačí { "minus", py_minus, METH_VARARGS }. Já si však myslím, že je dobré psát alespoň základní dokumentaci o funkci, a tím je její hlavička.
4) Tento příklad byl testován na 2.6. Pro Python 3 jsem to nezkoušel, vyzkouším.
5) Zda lze zavolat C funkce přímo v Pythonu nevím, nikde jsem se s tím nesetkal a podle mě to ani není možné.
Samozřejmě není potřeba si psát vlastní moduly v C/C++ (zvlášť tento příklad), ale pokud píšeme nějaký výpočtově náročný program a chceme dbát na rychlost, tak je velmi vhodné si napsat výpočet v C/C++.