Dëse Virtrag wäert ronderëm d'Moduler a Packagen am Python spanen.
Si sinn e Wee fir Äre Code a Form vu Dateien ze organiséieren a si wierklech wichteg wann Dir wëllt Webapplikatiounen mat Python bauen
Moduler
E Modul am Python ass am Fong eng Datei mat engem Python Code dee mir benotze fir eise Code an Dateien ze organiséieren. Denkt drun wéi Sektiounen an engem Supermarché. Wann Dir an e Supermarché gitt ginn et verschidde Rubriken fir Uebst, Geméis, Botzprodukter etc. Dir gesitt net eng Rubrik mat all de Produkter.
Et ass datselwecht Konzept am Programméiere. Amplaz all eise Code mat all Funktiounen a Klassen am main.py ze schreiwen, zerbriechen mir eise Code a verschidde Dateien. All Fichier gëtt als Modul bezeechent. Mat dësem ass eise Code net nëmmen besser organiséiert a strukturéiert, mä mir hunn och d'Fäegkeet eise Code nei ze benotzen. Loosst eis et duerch e Beispill kucken.
Loosst eis zwou Funktiounen definéieren fir Gewiicht vu Pond op Kilogramm ze konvertéieren a vice versa.
def lbs_to_kg(weight):
return weight * 0.45
def kg_to_lbs(weight):
return weight / 0.45
Elo kënne mir dës zwou Funktiounen huelen an se an engem separaten Modul setzen, genannt "Converter", an da kann et an all Programm importéiert ginn, deen dës Konverterfunktiounen brauch. Loosst mech Iech weisen wéi Dir dëst maacht.
Loosst eis eise Projet Panel opmaachen a klickt op de Projet an setzt eng nei Datei derbäi. Mir wäerten dës Datei "Converters.py" nennen.
Elo kopéiert de Code aus der Standarddatei a paste se an den "Converters.py".
Mat dësem hu mir eisen Haaptmodul gebotzt an et ass net mat verschiddene Funktiounen opgeblosen. Wéi mir méi Funktiounen mat Klassen schreiwen, setzen mir se an hir entspriechend Moduler. E Modul soll all verbonne Funktiounen a Klassen enthalen. Elo wëlle mir de Konvertermodul an eisen App Modul importéieren. Fir dëst ze maachen, schreift import converters
uewen ouni d'Extensioun ".py".
Mir kënnen Zougang zu de Membere vun engem Modul vun engem Punkt Bedreiwer benotzt ähnlech Methoden.
Loosst eis 70 kg an Pounds ëmsetzen:
Et gëtt och eng aner Syntax fir Moduler z'importéieren. Amplaz de ganze Modul z'importéieren, kënne mir spezifesch Funktiounen aus deem Modul importéieren. Mir kënnen Typ from Converters import
an dréckt "Kontroll + Raum fir d'Lëscht vun verfügbare Funktiounen ze weisen. Mat dësem kënne mir dës Funktioun direkt nennen.
bewéegen
Hei ass Är Übung.
Dëst ass am Zesummenhang mat enger Übung aus dem Virtrag wou mir diskutéiert hunn "fir Schleifen” wou mir e Programm geschriwwen hunn fir déi gréisst Zuel aus enger Lëscht erauszefannen
numbers = [8, 3, 6, 10, 5]
max = numbers[0]
for number in numbers:
if number > max:
max = number
print(max)
Dëse Code huet momentan keng Organisatioun. Mir hu keng Funktiounen oder Moduler an de Programm ass an enger eenzeger Datei geschriwwen. Dat ass okay fir kleng Programmer awer wéi Är Programmer wuessen, musst Dir Äre Code richteg a Klassen a Moduler organiséieren. Dofir, als Deel vun dëser Übung, Ech wëll datt Dir eng Funktioun schreift, nennt et find_max
. Dës Funktioun soll eng Lëscht huelen an déi gréisst Zuel an där Lëscht zréckginn. Duerno gitt weider a setzt dës Funktioun an engem separaten Modul, Extrait et vun hei a setzt se an e Modul genannt utils
. Dëse Modul soll eng Rëtsch Utilityfunktiounen enthalen. Import de utils
Modul an den aktuellen Modul an ruffen find_max
Funktioun. Endlech, kritt d'Resultat a dréckt et um Terminal.
Dës Übung ass e bëssen Erausfuerderung awer einfach ze maachen.
Léisung
Fänkt un andeems Dir eng Funktioun definéiert find_max
an dobäi e Parameter genannt Zuelen. Bannent dëser Funktioun schreift den Algorithmus fir déi gréisst Zuel an enger Lëscht ze fannen.
def find_max(numbers):
max = numbers[0]
for number in numbers:
if number > max:
max = number
return max
Späichert dëse Code an enger Datei "utils.py" als Modul.
Zréck op eisen Haaptprogramm, importéiert just de Modul duerch eng vun den zwou Syntaxen an fuert einfach d'Logik aus.
Eng Saach, ech muss Är Opmierksamkeet op déi ënnergruewen max
. De Grond dofir ass de max
ass eng agebaute Funktioun am Python a mir definéieren se nei. Also dat ass eng Warnung vun der Python Compiler datt mir max als seng agebaute Funktioun net méi kënne benotzen.
Built-in Moduler am Python
Python kënnt mat enger Standardbibliothéik déi verschidde Moduler fir allgemeng Aufgaben enthält wéi E-Mail schécken, mat Datum an Zäit schaffen, zoufälleg Wäerter a Passwierder generéieren an sou weider. Et gi sou vill Moduler scho a Python agebaut, wat heescht datt et scho vill Funktionalitéit ass, déi mir kënnen nei benotzen. Dir kënnt dës Moduler fannen hei.
Formulen
Packagen sinn am Fong eng aner Manéier fir eise Code uewen op de Moduler ze organiséieren. E richtege Projet kann Honnerte oder souguer Dausende vu Moduler enthalen a mat der Zäit gëtt eise Verzeechnes mat sou vill Dateien opgeblosen. Dofir ass eng besser Approche fir verbonne Moduler bannent engem Package ze organiséieren, wat de Package e Container fir verschidde Moduler mécht.
En neie Verzeechnes gëtt zum Projet bäigefüügt an all déi verbonne Moduler ginn an dee Verzeichnis bäigefüügt. Als Beispill, denken un engem Akafszenter. Et gi verschidde Sektioune fir Männer, Fraen a Kanner Kleeder an engem Akafszenter, déi wéi Packagen sinn. All Sektioun huet verschidde Beräicher fir verschidden Aarte vu Produkter wéi Schong, T-Shirten a Jacken. Denkt un dës als Moduler.
Loosst eis kucken wéi Dir Packagen am Python erstellt a benotzt.
Als éischt, füügt en neie Verzeechnes vum Projet Panel. Loosst eis et "eCommerce" nennen. Dëse Package enthält all d'Moduler am Zesummenhang mat enger eCommerce Applikatioun.
Et ass nach ëmmer en eidele Verzeechnes a fir en an e Package ze konvertéieren, musse mir eng speziell Datei dran erstellen. Füügt eng nei Python-Datei an dësem Verzeichnis a nennt dës Datei "__init__". Et ass eng speziell Konventioun am Python a wann de Python Dolmetscher e Fichier mat dësem Numm an engem Verzeechnes gesäit, behandelt en dësen Verzeechnes als e Package.
Mir hunn och eng alternativ a präzis Method fir e Package ze kreéieren. Klickt just op de Projet Panel a kreéiert e Python Package aus der Lëscht. Nennt et "eCommerce" an dat ass et. Et erstellt automatesch e Verzeechnes mat enger Python Datei mam Numm "__init__".
Elo, loosst eis e Modul am Package erstellen an et "Verschécken" nennen. An dësem Modul, loosst eis eng einfach Funktioun erstellen fir d'Versandkäschten ze berechnen.
def calc_shipping():
print("calc_shipping")
Fir Zougang zu dëser Funktioun an eisem Haaptmodul ze kréien, musse mir et iwwer den E-Commerce Package zougräifen. Nach eng Kéier hu mir zwou Methoden fir dëse Modul z'importéieren.
An der éischter Method kënne mir de ganze Modul importéieren an dann eng Funktioun onofhängeg esou nennen:
import eCommerce.shipping
eCommerce.shipping.calc_shipping()
Wéi och ëmmer, mat dëser Approche, eng vun de Funktiounen op dëse Modul ze ruffen, erfuerdert et Präfix eCommerce.shipping.
Dat ass ganz verbose. Also, wa mir mat Packagen schaffen, benotze mir dacks déi zweet Approche a benotzen d' from
Ausso.
from eCommerce.shipping import calc_shipping
calc_shipping()
Wann Dir verschidde Funktiounen an engem Modul hutt, kënnt Dir se all an enger eenzeger Linn importéieren andeems Dir Kommaen tëscht hinnen benotzt. Loosst eis soen datt et eng aner Funktioun fir d'Berechnung vun der Steier an eisem Versandmodul gëtt. Dat gëtt esou importéiert:
from eCommerce.shipping import calc_shipping, calc_tax
Dir kënnt och eenzel Moduler importéieren a Funktiounen verloossen fir spéider am Programm ze ruffen. Loosst eis de Modulverschécken importéieren an dann e Punktoperateur benotze fir d'Funktioun ze ruffen calc_shipping.
from eCommerce import shipping
shipping.calc_shipping()
Apaken!
Packagen a Moduler sinn extrem wichteg am Python. Besonnesch wann Dir mat engem Kader wéi Django wëllt schaffen, dee benotzt gëtt fir ze bauen Web Uwendungen mat Python. Mir kucken op Django wärend engem anere Python Cours.
Dëst war déi lescht konventionell Virliesung an dëser Serie. Déi nächst Virliesung wäert vun eisem gewéinleche Format ofwäichen a mir léieren e puer wichteg Benotzungsfäll am Python. Dat wäert d'Enn vun dëser Serie markéieren a mir ginn op eis nächst Python Serie weider. Bleift dofir drop.
Hannerlooss eng Äntwert