Table of Contents[Ferstopje][Toanje]
Dizze lêzing sil omgean oer de modules en pakketten yn Python.
Se binne in manier om jo koade te organisearjen yn 'e foarm fan bestannen en binne echt wichtich as jo fan doel binne webapplikaasjes te bouwen mei Python
modules
In module yn Python is yn prinsipe in bestân mei wat python-koade dy't wy brûke om ús koade yn bestannen te organisearjen. Tink oan it as seksjes yn in supermerk. As jo nei in supermerk geane binne d'r ferskate seksjes foar fruit, griente, skjinmakprodukten ensfh. Jo sjogge net ien seksje mei alle produkten.
It is itselde konsept yn programmearring. Ynstee fan it skriuwen fan al ús koade mei alle funksjes en klassen yn main.py, brekke wy ús koade op yn meardere bestannen. Elke triem wurdt oantsjutten as in module. Hjirmei is ús koade net allinich better organisearre en strukturearre, mar wy hawwe ek de mooglikheid om ús koade opnij te brûken. Litte wy it sjen troch in foarbyld.
Litte wy twa funksjes definiearje foar it konvertearjen fan gewicht fan pûn nei kilogram en oarsom.
def lbs_to_kg(weight):
return weight * 0.45
def kg_to_lbs(weight):
return weight / 0.45
No, wy kinne nimme dizze twa funksjes en set se yn in aparte module neamd "converters", en dan kin wurde ymportearre yn elk programma dat nedich dizze converter funksjes. Lit my jo sjen litte hoe't jo dit dwaan.
Litte wy ús projektpaniel iepenje en rjochtsklikke op it projekt en in nij bestân tafoegje. Wy sille dizze triem "Converters.py" neame.
Kopiearje no de koade fan it standertbestân en plak it yn 'e "Converters.py".
Hjirmei hawwe wy ús haadmodule skjinmakke en it is net opblaasd mei ferskate funksjes. As wy mear funksjes skriuwe mei klassen, sette wy se yn har oerienkommende modules. In module moat alle relatearre funksjes en klassen befetsje. No wolle wy de convertersmodule ymportearje yn ús appmodule. Om dit te dwaan, skriuw import converters
op de top sûnder de tafoeging ".py".
Wy kinne tagong krije ta de leden fan in module troch in puntoperator te brûken lykas metoaden.
Lit ús 70 kg konvertearje yn pûn:
D'r is ek in oare syntaksis foar it ymportearjen fan modules. Yn stee fan it ymportearjen fan de hiele module, kinne wy ymportearje spesifike funksjes út dy module. Wy kinne typen from Converters import
en druk op "kontrôle + spaasje om de list mei beskikbere funksjes sjen te litten. Hjirmei kinne wy dizze funksje direkt neame.
Oefenje
Hjir is dyn oefening.
Dit is relatearre oan in oefening út 'e lêzing wêr't wy besprutsen "foar loops” wêr't wy in programma skreaun hawwe om it grutste oantal út in list te finen
numbers = [8, 3, 6, 10, 5]
max = numbers[0]
for number in numbers:
if number > max:
max = number
print(max)
Dizze koade hat op it stuit gjin organisaasje. Wy hawwe gjin funksjes of modules en it programma is skreaun yn ien triem. Dat is goed foar lytse programma's, mar as jo programma's groeie, moatte jo jo koade goed organisearje yn klassen en modules. Dêrom, as ûnderdiel fan dizze oefening, ik wol dat jo in funksje skriuwe, neam it find_max
. Dizze funksje moat in list nimme en it grutste nûmer yn dy list weromjaan. Nei dat gean fierder en set dizze funksje yn in aparte module, extract it út hjir en set it yn in module neamd utils
. Dizze module moat in boskje nutsfunksjes befetsje. Ymportearje de utils
module yn de hjoeddeiske module en belje find_max
funksje. As lêste, krije it resultaat en printsje it op 'e terminal.
Dizze oefening is in bytsje útdaagjend, mar maklik te dwaan.
Oplossing
Begjin by it definiearjen fan in funksje find_max
en heakje in parameter neamd nûmers. Skriuw binnen dizze funksje it algoritme foar it finen fan it grutste nûmer yn in list.
def find_max(numbers):
max = numbers[0]
for number in numbers:
if number > max:
max = number
return max
Bewarje dizze koade yn in triem "utils.py" as in module.
Werom nei ús haadprogramma, ymportearje de module gewoan troch ien fan 'e twa syntaksis en útfiere gewoan de logika.
Ien ding, ik moat jo oandacht bringe, is it ûndergraven max
. De reden dêrfoar is de max
is in ynboude funksje yn Python en wy definiearje it op 'e nij. Dit is dus in warskôging fan 'e Python kompilator dat wy kinne net mear brûke max as syn ynboude funksje.
Ynboude modules yn Python
Python komt mei in standertbibleteek dy't ferskate modules befettet foar mienskiplike taken lykas it ferstjoeren fan e-mails, wurkje mei datum en tiid, it generearjen fan willekeurige wearden en wachtwurden ensafuorthinne. D'r binne al safolle modules yn Python ynboud, wat betsjut dat d'r al in protte funksjonaliteit is dy't wy opnij kinne brûke. Jo kinne dizze modules fine hjir.
Packages
Pakketten binne yn prinsipe in oare manier om ús koade boppe op 'e modules te organisearjen. In echt projekt kin hûnderten of sels tûzenen modules befetsje en mei de tiid sil ús map mei safolle bestannen opblaasd wurde. Dêrom is in bettere oanpak om relatearre modules binnen in pakket te organisearjen, wat it pakket in kontener makket foar meardere modules.
In nije map wurdt tafoege oan it projekt en alle relatearre modules wurde tafoege oan dy map. As foarbyld, tink oan in winkelsintrum. D'r binne ferskate seksjes foar klean foar manlju, froulju en bern yn in winkelsintrum dy't as pakketten binne. Elke seksje hat ferskate gebieten foar ferskate soarten produkten lykas skuon, t-shirts en jassen. Tink oan dizze as modules.
Litte wy sjen hoe't jo pakketten meitsje en brûke yn Python.
Foegje earst in nije map ta fan it projektpaniel. Litte wy it "eCommerce" neame. Dit pakket sil alle modules befetsje dy't relatearre binne oan in eCommerce-applikaasje.
It is noch in lege map en om it yn in pakket te konvertearjen, moatte wy der in spesjale triem yn meitsje. Foegje in nij python-bestân ta yn dizze map en neam dat bestân "__init__". It is in spesjale konvinsje yn Python en as de Python-tolk in bestân mei dizze namme yn in map sjocht, behannelet it dizze map as in pakket.
Wy hawwe ek in alternative en beknopte metoade om in pakket te meitsjen. Klikje gewoan mei rjochts op it projektpaniel en meitsje in Python-pakket út 'e list. Neam it "eCommerce" en dat is it. It sil automatysk in map meitsje mei in Python-bestân mei de namme "__init__".
Litte wy no in module yn it pakket oanmeitsje en it "ferstjoere" neame. Litte wy yn dizze module in ienfâldige funksje meitsje foar it berekkenjen fan ferstjoerkosten.
def calc_shipping():
print("calc_shipping")
Om tagong te krijen ta dizze funksje yn ús haadmodule, moatte wy it tagong krije fia it e-commerce-pakket. Nochris hawwe wy twa metoaden om dizze module te ymportearjen.
Yn 'e earste metoade kinne wy de hiele module ymportearje en dan in funksje selsstannich as dit neame:
import eCommerce.shipping
eCommerce.shipping.calc_shipping()
Lykwols, mei dizze oanpak, it roppen fan ien fan 'e funksjes nei dizze module fereasket it foarheaksel mei eCommerce.shipping.
Dat is tige wiidweidich. Dus, by it wurkjen mei pakketten brûke wy faaks de twadde oanpak en brûke de from
ferklearring.
from eCommerce.shipping import calc_shipping
calc_shipping()
As jo meardere funksjes yn ien module hawwe, kinne jo se allegear yn ien rigel ymportearje troch komma's tusken har te brûken. Litte wy sizze dat d'r in oare funksje is foar it berekkenjen fan belesting yn ús ferstjoermodule. Dat sil sa ymportearre wurde:
from eCommerce.shipping import calc_shipping, calc_tax
Jo kinne ek yndividuele modules ymportearje en funksjes litte om op in letter stadium yn it programma op te roppen. Litte wy de moduleferstjoering ymportearje en dan in puntoperator brûke om de funksje op te roppen calc_shipping.
from eCommerce import shipping
shipping.calc_shipping()
Gearfetsje!
Pakketten en modules binne ekstreem wichtich yn Python. Benammen as jo wolle wurkje mei in ramt lykas Django dat wurdt brûkt foar it bouwen webapplikaasjes mei Python. Wy sille Django besjen tidens in oare Python-kursus.
Dit wie de lêste konvinsjonele lêzing yn dizze searje. De folgjende lêzing sil ôfwike fan ús gewoane opmaak en wy sille wat wichtige gebrûksgefallen leare yn Python. Dat sil it ein fan dizze searje markearje en wy sille trochgean nei ús folgjende Python-searje. Bliuw dêrfoar op 'e hichte.
Leave a Reply