Rozšíření Python - C

Obsah

Jazyk programování C. Byl k dispozici vývojářům softwaru po mnoho let, protože je to kompilovaný jazyk, díky kterému můžeme dělat programy mnohem optimálnější a rychlejší, díky tomu je tento jazyk stále v platnosti, protože umožňuje rychlé provádění různých typů zpracování.

v Krajta Síla rozvíjet čitelným a přátelským způsobem přichází s malou cenou, která spočívá v tom, že v některých velmi specifických procesech může dojít ke ztrátě výkonu, takže pokud tato ztráta není přijatelná a ohrožuje náš program, musíme hledat alternativy. Jeho flexibilita nám umožňuje začlenit moduly vyrobené v jiných jazycích, jako je C.

Psaní rozšíření v C
psát C rozšíření není tak transparentní, jak to dělat v C # nebo v JÁVA že s různými implementacemi Pythonu to děláme velmi rychle a snadno, s C musíme dodržovat a API velmi přísné, nicméně tyto potíže vedly k nástrojům, které se snaží tento proces zlepšit, jedním z nich je LOK.

LOK je zkratka pro Jednoduchý generátor obálky a rozhraní je nástroj, který nám umožňuje vyvíjet rozšíření v jazyce C nebo C ++ a poté je zabalit pro použití v jazycích vyšší úrovně, jako je například Krajta, Perl, Rubín a další.

Co dělá SWIG?
Použít LOK Musíme splnit několik jednoduchých kroků, uvidíme, co dále potřebujeme:

  • Pro náš kód C musíme napsat rozhraní, tento typ souboru je velmi podobný souboru záhlaví; v některých případech můžete použít záhlaví přímo.
  • Běžíme LOK v souboru rozhraní to způsobí, že se vygeneruje více kódu v C, tj. wrapperu.
  • Zkompilováme soubor rozhraní společně s balíčkem, se kterým generujeme sdílenou knihovnu, kterou můžeme používat v jazycích kompatibilních s LOK.

Trochu praxe
Když jsme zvládli trochu teorie, podívejme se nyní na příklad toho, který jsme vysvětlili, vytvoříme modul, který detekuje, zda je řetězec palindrom, to znamená, že je čten stejným způsobem v obou směrech, tento neznamená, že to představuje problém KrajtaKdyž se ale jedná o opravdu velké řetězce, lze si všimnout problému s výkonem, nejprve se podívejme na kód na následujícím obrázku a poté uvidíme, jak implementujte jej pomocí SWIG:

Tady máme implementaci v C, abychom věděli, zda je řetězec palindrom, pak vytvoříme rozhraní, které je následující kód:

Protože máme úplné požadavky na úrovni C, prozatím uvidíme, co musíme udělat LOK abyste mohli použít toto:

Nejprve musíme spustit následující příkaz:

 $ swig -python palindrome.i
Kde palindrome.i je to naše rozhraní. Tím se vygenerují soubory Krajta je nutné, pak musíme zkompilovat vše, pro tento krok musíme velmi dobře znát cesty našich prvků, abychom mohli vytvářet správné reference:
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Include -c palindrome_wrap.c gcc -shared palindrome.o palindrome_wrap.o -o _palindrome.so 
Po těchto krocích můžeme použít naši novou knihovnu v Krajta jak následuje:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
Tímto tutoriál dokončíme, protože vidíme, že je trochu složitý implementovat rozšíření v C dosažený výkon však stojí za to.

Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave