Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Vlákno názorů k článku
Vytváříme v C/C++ modul pro Python

Pavel Lang aura:57
3. 11. 2009 1:06

Re: Vytváříme v C/C++ modul pro Python

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
volca
volca (neregistrovaný) 93.90.162.---
3. 11. 2009 8:58

Re: Vytváříme v C/C++ modul pro Python

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)

mimi.vx
mimi.vx (neregistrovaný) 94.74.251.---
3. 11. 2009 12:02

Re: Vytváříme v C/C++ modul pro Python

plus existuje jeste pyrex a cython …

Jakub Matys
Jakub Matys (neregistrovaný) ---.lcs.cz
3. 11. 2009 9:30

Re: Vytváříme v C/C++ modul pro Python

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#…

Michal Hořejšek aura:100
3. 11. 2009 14:19

Re: Vytváříme v C/C++ modul pro Python

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

Zasílat nově přidané příspěvky e-mailem