En jevn forfriskning på Pythons moduler

Dette blir den siste opplæringen i Python-oppdateringsserien. Selvfølgelig kan jeg ikke konkludere denne serien med mindre jeg flytter deg til neste nivå i programmering, det vil si å jobbe med moduler, som anses som grunnleggende når man håndterer ikke-trivielle programmeringsoppgaver.

Nontrivial programmeringsoppgaver betyr mesteparten av tiden lange programmer med mange linjer med kode. Modulene kommer til nytte da de forsøker å bryte slike komplekse programmer inn i håndterbare biter og aktivere kodegenbruk. På denne måten vil du også kunne bruke koden til enhver tid importere den modulen. Du kan også løse problemet med å kopiere noen funksjon mange ganger i forskjellige programmer ved å administrere det gjennom moduler.

La oss gå videre til kjøttet i opplæringen, og se hvordan vi kan jobbe med moduler i Python.

Moduler i Python

Når du opprettet Python-programmer, pleide du å sette dem i en kildefil som ender med .py. Moduler i Python er enkelt opprettet på den måten. Det vil si, de er kildefiler som slutter med .py, og ligger i en katalog hvor Python er i stand til å finne dem (dvs. den nåværende arbeidskatalogen eller oppført i sys.path). 

Modulene inneholder normalt setninger som er relatert til hverandre. Som nevnt ovenfor kan vi til enhver tid bruke moduler. Bruk av en modul betyr å bruke koden (dvs. variabler, funksjoner) som er lagret i den modulen. Prosessen med å ta opp og bruke slik kode kalles importere.

Opprette moduler

Å lage en modul i Python er veldig enkel. La oss si at vi ønsket å lage en modul som ville skrive ut noen navn. Skriv inn følgende kode ved hjelp av din favorittredigerer, og lagre den som myname.py. Dette vil være ditt modulnavn utenom .py del, som vil bli tildelt den globale variabelen __Navn__.

def print_name (n): skriv ut 'Hei', n

Importerer moduler

Hvis du har en annen Python-fil der du er interessert i å bruke koden i modulen som er definert ovenfor, importerer vi modulen ved hjelp av importere søkeord, som følger:

importer myname name.print_name ('Abder')

Utgangen av dette skriptet vil være: Hei Abder.

Pass på at Python kan finne den importerte filen. For eksempel, sett det i samme katalog som Python-filen der du brukte importere.

Som du kan se, kan importering av en modul oss forbedre vårt program ved å legge til ny funksjonalitet fra eksterne filer (dvs. moduler).

Men hva skjer her bak kulissene? Når du importere en modul, Python samler den modulen og genererer a .PYC fil, og et program gjenkompileres bare hvis .py er nyere enn .PYC fil.

La oss ta et annet eksempel, men denne gangen med en Python innebygd modul. La oss velge matematikkmodulen. I dette eksemplet, for et nummer vi passerer vil vi finne tak (den minste heltallverdien er større enn eller lik tallet), gulv (største heltal verdi mindre enn eller lik tallet), og absolutt verdi av det nummeret. Python-skriptet for dette programmet ser ut som følger:

Import matematikk x = 4.7 Skriv ut 'Taket av' + str (x) + 'er:' + str (math.ceil (x)) print 'Gulvet av' + str (x) + 'er:' + str math.floor (x)) print 'Den absolutte verdien av' + str (x) + 'er:' + str (math.fabs (x))

Hvis du kjører dette skriptet, bør utgangen se slik ut:

Taket på 4,7 er: 5,0 Gulvet på 4,7 er: 4,0 Den absolutte verdien av 4,7 er: 4,7

Så, vi kunne bruke forskjellige operasjoner på vårt nummer uten å skrive kode for hver operasjon, men heller ved gjenbruk allerede tilgjengelige funksjoner i matte modul. Det hjelper mye, gjør det ikke?

Du lurer kanskje på, bør vi alltid bruke math.function () notasjon? Kan vi ikke bruke funksjonen umiddelbart uten å forhåndsgjøre det med modulnavnet (dvs.. matte)? Ja, det kan du gjøre ved å bruke følgende syntaks for importere:

fra matematikkimport *

På denne måten kan du ringe forrige funksjoner (ceil (x), etasje (x), og Fab-fragmenter (x)) uten å måtte forhåndsføre dem med modulnavnet, matte

Moduler som skript

La oss komme tilbake til vår enkle modul, myname.py:

def print_name (n): skriv ut 'Hei', n

Kan vi behandle denne modulen som et frittstående (hoved) skript som vi kan direkte kjøre og sende argumenter til fra kommandolinjen? For eksempel, hva skjer hvis du skrev følgende i kommandolinjen din?

python myname.py 'Abder'

Ingenting! Prøv det - du vil ikke få noen utdata. 

For å kunne kjøre modulen som et skript, må vi sette __name__ = '__main__'. Så, modulen mitt navn vil nå se ut som følger:

def print_name (n): skriv ut 'Hei', n hvis __name__ == '__main__': import sys print_name (sys.argv [1])

Hvis du kjører denne kommandoen i terminalen din: python myname.py 'Abder', du bør få følgende utgang:

Hei Abder

pakker

Et viktig konsept som kommer hånd i hånd med moduler, er at pakker. En pakke er en samling av moduler. Med andre ord, mens en modul er en fil, er en pakke en mappe / mappe. Det er en måte å strukturere modulene på ved hjelp av stiplede modulnavn. Så hvis du ser en importere setning som ser ut som:

import university.department

Dette betyr at vi har en modul kalt avdeling i pakken universitet.

Som vi kan se, bruker moduler oss til å dele et komplekst program i håndterbare biter, noe som gjør det lettere å spore eventuelle feil i programmet, forstå funksjonaliteten bedre og muliggjøre gjenbrukbarhet.

Med dette kommer vi til slutten av Python-oppdateringsserie. I denne serien har vi lært det grunnleggende og nødvendige begreper man trenger å forstå for å kunne bevege seg videre i Pythons programmeringsspråk. Vi har lært begreper lister, ordbøker og tuples. Vi har også lært hvordan å ta beslutninger gjennom forhold (link til python forhold), og gjenta gjennom løkker (lenke til python looper). Vi har også lært å jobbe med funksjoner, lage klasser og instantiere dem (dvs. objekter), og pakke arbeidet vårt i moduler.