Dit is de laatste zelfstudie in de Python-vernieuwersserie. Natuurlijk kan ik deze serie niet afsluiten, tenzij ik je naar het volgende niveau in programmeren breng, dat wil zeggen, werken met modules, die als fundamenteel worden beschouwd bij het omgaan met niet-triviale programmeertaken.
Niet-triviale programmeertaken betekenen meestal lange programma's met veel regels code. Modules zijn handig als ze proberen dergelijke complexe programma's in beheersbare brokken te breken en code opnieuw te gebruiken. Op deze manier kunt u de code ook op elk gewenst moment gebruiken importeren die module. U kunt het probleem van het vele malen kopiëren van sommige functies in verschillende programma's ook oplossen door deze via modules te beheren.
Laten we verder gaan met de uitleg van de tutorial en zien hoe we kunnen werken met modules in Python.
Toen u Python-programma's maakte, legde u ze in een of ander bronbestand dat eindigt op .py
. Modules in Python worden eenvoudig op die manier gemaakt. Dat wil zeggen, het zijn bronbestanden die eindigen op .py
, en zich bevinden in een map waar Python ze kan vinden (dat wil zeggen de huidige werkmap of die wordt vermeld in sys.path).
Modules bevatten normaal gesproken uitspraken die met elkaar te maken hebben. Zoals hierboven vermeld, kunnen we modules op elk moment gebruiken. Gebruik van een module betekent het gebruik van de code (dat wil zeggen variabelen, functies) die in die module is opgeslagen. Het proces van het opvoeden en gebruiken van dergelijke code wordt genoemd importeren.
Het maken van een module in Python is heel eenvoudig. Laten we zeggen dat we een module wilden maken die de naam van iemand zou afdrukken. Typ de volgende code met behulp van uw favoriete editor en sla deze op als myname.py
. Dit wordt uw modulenaam met uitzondering van de .py
deel, dat zal worden toegewezen aan de globale variabele __naam__
.
def print_name (n): print 'Hallo', n
Als u een ander Python-bestand heeft waarin u geïnteresseerd bent in het gebruik van de code in de hierboven gedefinieerde module, zullen we de module importeren met behulp van de importeren
sleutelwoord, als volgt:
importeer mijnnaam name.print_name ('Abder')
De uitvoer van dit script zal zijn: Hallo Abder
.
Zorg ervoor dat Python het geïmporteerde bestand kan vinden. Plaats het bijvoorbeeld in dezelfde map als het Python-bestand waar u het gebruikte importeren
.
Zoals u kunt zien, kunnen we met het importeren van een module ons programma verbeteren door nieuwe functionaliteit toe te voegen vanuit externe bestanden (zoals modules).
Maar wat gebeurt er hier achter de schermen? Wanneer je importeren
een module, Python compileert die module en genereert een .pyc
bestand en een programma wordt alleen opnieuw gecompileerd als het .py
is nieuwer dan de .pyc
het dossier.
Laten we nog een ander voorbeeld nemen, maar dit keer met een ingebouwde module van Python. Laten we de wiskundemodule kiezen. In dit voorbeeld willen we voor een getal dat we passeren het plafond (de kleinste gehele waarde groter dan of gelijk aan het getal), verdieping (grootste geheel getal kleiner dan of gelijk aan het getal), en de absolute waarde van dat aantal. Het Python-script voor dit programma ziet er als volgt uit:
import math x = 4.7 print 'Het plafond van' + str (x) + 'is:' + str (math.ceil (x)) print 'De verdieping van' + str (x) + 'is:' + str ( math.floor (x)) print 'De absolute waarde van' + str (x) + 'is:' + str (math.fabs (x))
Als u dit script uitvoert, ziet de uitvoer er als volgt uit:
Het plafond van 4.7 is: 5.0 De vloer van 4.7 is: 4.0 De absolute waarde van 4.7 is: 4.7
We waren dus in staat om verschillende bewerkingen op ons nummer toe te passen zonder code te schrijven voor elke bewerking, maar eerder door hergebruiken reeds beschikbare functies in de wiskunde
module. Dat helpt veel, nietwaar?
U vraagt zich misschien af, moeten we altijd de math.function ()
notatie? Kunnen we de functie niet onmiddellijk gebruiken zonder de modulenaam (d.w.z.. wiskunde
)? Ja, u kunt dat doen door de volgende syntaxis te gebruiken voor de importeren
:
van wiskunde-import *
Op deze manier kunt u de vorige functies (ceil (x)
, vloer (x)
, en Fabs (x)
) zonder de noodzaak om daaraan vooraf te gaan met de modulenaam, wiskunde
.
Laten we teruggaan naar onze eenvoudige module, myname.py
:
def print_name (n): print 'Hallo', n
Kunnen we deze module behandelen als een op zichzelf staand (hoofd) script dat we direct kunnen uitvoeren en argumenten doorgeven vanaf de opdrachtregel? Wat zal er bijvoorbeeld gebeuren als u het volgende in uw opdrachtregel hebt ingetypt??
python myname.py 'Abder'
Niets! Probeer het - u zult geen output krijgen.
Om de module als een script te kunnen gebruiken, moeten we instellen __name__ = '__main__
'. Dus de module mijn naam
ziet er nu als volgt uit:
def print_name (n): print 'Hallo', n if __name__ == '__main__': import sys print_name (sys.argv [1])
Als u deze opdracht uitvoert in uw terminal: python myname.py 'Abder'
, je zou de volgende output moeten krijgen:
Hallo Abder
Een belangrijk concept dat hand in hand gaat met modules is dat van pakketjes. Een pakket is een verzameling modules. Met andere woorden, terwijl een module een bestand is, is een pakket een map / map. Het is een manier waarop we de modules structureren met behulp van gestippelde modulenamen. Dus als je een ziet importeren
verklaring die eruit ziet als:
import universiteit.departement
Dit betekent dat we een module hebben genaamd afdeling
in het pakket Universiteit
.
Zoals we kunnen zien, kunnen we met behulp van modules een complex programma splitsen in beheersbare brokken, waardoor het gemakkelijker wordt om fouten in het programma te traceren, de functionaliteit beter te begrijpen en herbruikbaarheid mogelijk te maken.
Hiermee komen we aan het einde van de Python-verfrissersreeks. In deze serie hebben we de basisbeginselen en noodzakelijke concepten geleerd die nodig zijn om verder te gaan in de Python-programmeertaal. We hebben de concepten van lijsten, woordenboeken en tuples geleerd. We hebben ook geleerd hoe we beslissingen moeten nemen door middel van voorwaarden (link naar Python-voorwaarden) en doorlopende lussen (link naar Python-loops). We hebben ook geleerd om met functies te werken, klassen te maken en deze te instantiëren (d.w.z. objecten), en verpakken ons werk in modules.