Vlákno názorů k článku Vytváříme v C/C++ modul pro Python od Pavel Lang - Pěkné, tročku čeština by mohla „jít líp“, ale...

  • Článek je starý, nové názory již nelze přidávat.
  • 3. 11. 2009 1:06

    Pavel Lang
    Pěkné, tročku čeština by mohla „jít líp“, ale stranou a pár dotazů:
    • 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íc
    • je docstring povinný? dá se předat bez potíží NULL nebo ukončit pole?
    • o jakou verzi Pythonu se zde jedná? Jde pouze o trojku nebo lze aplikovat i např. na 2.6?
    • Existuje jiná forma importu funkcí C knihoven do Pythonu než pomocí wraperů? (třeba jestli lze zavolat printf přímo z Pythonu..) Chápu, že článek navádí, jak psát moduly přímo pro Python v C, ale nezmiňuje se o alternativě
    Díky za odpovědi.
    Článek zajímavý nicméně se mi zdá nějak narychlo napsaný, ale každopádně díky za něj, sám mám Python rád, ale zatím jsem neměl potřebu psát si modul v C/C++, knihoven které lze naimportovat je dost a zatím stačily
  • 3. 11. 2009 8:58

    volca (neregistrovaný)

    Pokusim 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 PyCFunctionWit­hKeywords)
    * 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)

  • 3. 11. 2009 9:30

    Jakub Matys (neregistrovaný)

    Od verze 2.5 je v Pythonu knihovna ctypes. Podle dokumentace my měla umožňovat spouštět Cčkovské funkce. Zatím jsem ji však prakticky nezkoušel.

    http://docs.python.org/…/ctypes.html#…

  • 3. 11. 2009 14:19

    bez přezdívky

    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++.