Python - C -udvidelser

Indholdsfortegnelse

Sproget i programmering C Det er blevet gjort tilgængeligt for softwareudviklere i mange år, da det er et kompileret sprog, kan vi gøre programmer meget mere optimale og hurtigere, takket være dette sprog er det stadig i kraft, da det gør det muligt at udføre forskellige former for behandling hurtigt.

I Python Kraften til at udvikle sig på en læsbar og venlig måde kommer med en lille pris, som er, at ydeevnen kan gå tabt i nogle meget specifikke processer, så hvis dette tab ikke er acceptabelt og sætter vores program i fare, skal vi lede efter alternativer. Dens fleksibilitet gør det muligt for os at inkorporere moduler fremstillet på andre sprog som C.

Skriv udvidelser i C
at skrive C -udvidelser er ikke så gennemsigtig som at gøre det i C # eller i JAVA at vi med de forskellige Python -implementeringer gør det meget hurtigt og let, med C skal vi overholde a API meget strenge, men disse vanskeligheder har ført til værktøjer, der forsøger at forbedre denne proces, en af ​​dem er SWIG.

SWIG er et akronym for Enkel indpakning og grænsefladegenerator er et værktøj, der giver os mulighed for at udvikle udvidelser i C eller C ++ og derefter pakke dem til brug på sprog på højt niveau som f.eks. Python, Perl, Rubin og andre.

Hvad gør SWIG?
At bruge SWIG Vi skal bare udføre et par enkle trin, lad os se, hvad vi skal bruge næste gang:

  • Vi skal skrive en grænseflade til vores C -kode, denne type fil ligner meget overskrifter; i nogle tilfælde kan du bruge header -filen direkte.
  • Vi løber SWIG i grænsefladefilen forårsager dette, at der genereres mere kode i C, det vil sige indpakningen.
  • Vi kompilerer filen grænseflade sammen med den pakker, som vi genererer et delt bibliotek med, som vi kan bruge med de sprog, der er kompatible med SWIG.

Lidt øvelse
Efter at have mestret lidt teori, lad os nu se et eksempel på dette, som vi har forklaret, vi skal lave et modul, der registrerer, om en streng er palindrom, det vil sige, at den læses på samme måde i begge retninger, dette er ikke, at det repræsenterer et problem at PythonMen når de er virkelig store strenge, kan ydelsesproblemet bemærkes, lad os først se koden i det følgende billede og derefter se, hvordan implementer det ved hjælp af SWIG:

Her har vi implementeringen i C, for at vide, om en streng er palindrome, så bygger vi grænsefladen, som er følgende kode:

Da vi har de komplette krav på C-niveau, vil vi for nu se, hvad vi skal gøre i SWIG for at kunne bruge dette:

Først skal vi køre følgende kommando:

 $ swig -python palindrome.i
Hvor palindrome.i det er vores interface. Dette vil generere filerne Python nødvendigt, så skal vi samle alt, for dette trin skal vi meget godt kende vores elementers veje for at kunne foretage de korrekte referencer:
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Inkluder -c palindrome_wrap.c gcc -delt palindrome.o palindrome_wrap.o -o _palindrome.so 
Efter disse trin kan vi bruge vores nye bibliotek i Python som følger:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
Med dette afslutter vi selvstudiet, som vi ser det er lidt komplekst implementere udvidelser i C den opnåede præstation er dog det hele værd.

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt
wave wave wave wave wave