Python - Estensioni C

Sommario

La lingua di programmazione C È stato messo a disposizione degli sviluppatori di software per molti anni, essendo un linguaggio compilato possiamo rendere i programmi molto più ottimali e veloci, grazie a questo questo linguaggio è ancora in vigore poiché consente di eseguire rapidamente diversi tipi di elaborazione.

Nel Pitone Il potere di svilupparsi in modo leggibile e amichevole ha un piccolo prezzo, ovvero che le prestazioni possono essere perse in alcuni processi molto specifici, quindi se questa perdita non è accettabile e mette a rischio il nostro programma, dobbiamo cercare alternative. La sua flessibilità ci consente di incorporare moduli realizzati in altri linguaggi come C.

Scrivere estensioni in Do
scrivere estensioni C non è così trasparente come farlo in C # o in GIAVA che con le diverse implementazioni di Python lo rendiamo molto veloce e facile, con C dobbiamo aderire a a API molto severo, tuttavia queste difficoltà hanno portato a strumenti che cercano di migliorare questo processo, uno di questi è SWIG.

SWIG è un acronimo di Wrapper semplice e generatore di interfaccia è uno strumento che ci permette di sviluppare estensioni in C o C++ per poi impacchettarle per utilizzarle in linguaggi di alto livello come Pitone, Perla, Rubino e altri.

Cosa fa SWIG?
Usare SWIG Non ci resta che eseguire alcuni semplici passaggi, vediamo di cosa abbiamo bisogno dopo:

  • Dobbiamo scrivere un'interfaccia per il nostro codice C, questo tipo di file è molto simile al intestazioni; in alcuni casi puoi usare direttamente il file di intestazione.
  • Corriamo SWIG nel file di interfaccia, questo fa sì che venga generato più codice in C, ovvero il wrapper.
  • Compiliamo il file interfaccia insieme al packager con cui generiamo una libreria condivisa che possiamo usare con i linguaggi compatibili con SWIG.

Un po' di pratica
Dopo aver imparato un po' di teoria, vediamo ora un esempio di ciò che abbiamo spiegato, faremo un modulo che rileva se una stringa è palindroma, cioè se viene letta allo stesso modo in entrambe le direzioni, questo non è che rappresenti un problema per PitoneTuttavia, quando sono stringhe veramente grandi, il problema di prestazioni si può notare, vediamo prima il codice nell'immagine seguente e poi vediamo come implementalo usando SWIG:

Qui abbiamo l'implementazione in C, per sapere se una stringa è palindroma, quindi costruiamo l'interfaccia che è il seguente codice:

Dal momento che abbiamo i requisiti di livello C completi, per ora vedremo cosa dobbiamo fare in SWIG per poter utilizzare questo:

Per prima cosa dobbiamo eseguire il seguente comando:

 $ swig -python palindrome.i
In cui si palindromo.i è la nostra interfaccia. Questo genererà i file Pitone necessario, quindi dobbiamo compilare tutto, per questo passaggio dobbiamo conoscere molto bene i percorsi dei nostri elementi per poter fare i riferimenti corretti:
 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 
Dopo questi passaggi possiamo utilizzare la nostra nuova libreria in Pitone come segue:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
Con questo finiamo il tutorial, come vediamo è un po' complesso implementare estensioni in C comunque le prestazioni raggiunte ne valgono la pena.

Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo
wave wave wave wave wave