Bydd y ddarlith hon yn rhychwantu'r modiwlau a'r pecynnau yn Python.
Maent yn ffordd o drefnu'ch cod ar ffurf ffeiliau ac maent yn bwysig iawn os ydych chi'n bwriadu adeiladu cymwysiadau gwe gyda Python
modiwlau
Yn y bôn, mae modiwl yn Python yn ffeil gyda rhywfaint o god python a ddefnyddiwn i drefnu ein cod yn ffeiliau. Meddyliwch amdano fel adrannau mewn archfarchnad. Pan fyddwch chi'n mynd i archfarchnad mae yna wahanol adrannau ar gyfer ffrwythau, llysiau, cynhyrchion glanhau ac ati. Nid ydych chi'n gweld un adran gyda'r holl gynhyrchion.
Dyma'r un cysyniad mewn rhaglennu. Yn lle ysgrifennu ein holl god gyda'r holl swyddogaethau a dosbarthiadau yn main.py, rydym yn torri i fyny ein cod yn ffeiliau lluosog. Cyfeirir at bob ffeil fel modiwl. Gyda hyn, nid yn unig y mae ein cod wedi'i drefnu a'i strwythuro'n well, ond mae gennym hefyd y gallu i ailddefnyddio ein cod. Gadewch i ni ei weld trwy enghraifft.
Gadewch i ni ddiffinio dwy swyddogaeth ar gyfer trosi pwysau o bunnoedd i gilogramau ac i'r gwrthwyneb.
def lbs_to_kg(weight):
return weight * 0.45
def kg_to_lbs(weight):
return weight / 0.45
Nawr, gallwn gymryd y ddwy swyddogaeth hyn a'u rhoi mewn modiwl ar wahân o'r enw “troswyr”, ac yna gellir ei fewnforio i unrhyw raglen sydd angen y swyddogaethau trawsnewidydd hyn. Gadewch imi ddangos i chi sut i wneud hyn.
Gadewch i ni agor ein panel prosiect a de-gliciwch ar y prosiect ac ychwanegu ffeil newydd. Rydyn ni'n mynd i alw'r ffeil hon yn “Converters.py”.
Nawr copïwch y cod o'r ffeil ddiofyn a'i gludo i mewn i'r "Converters.py".
Gyda hyn, rydym wedi glanhau ein prif fodiwl ac nid yw wedi'i chwyddo â swyddogaethau gwahanol. Wrth i ni ysgrifennu mwy o swyddogaethau gyda dosbarthiadau, rydyn ni'n eu rhoi yn eu modiwlau cyfatebol. Dylai modiwl gynnwys yr holl swyddogaethau a dosbarthiadau cysylltiedig. Nawr, rydym am fewnforio'r modiwl trawsnewidwyr i'n modiwl app. I wneud hyn, ysgrifennwch import converters
ar y brig heb yr estyniad “.py”.
Gallwn gael mynediad i aelodau modiwl trwy ddefnyddio gweithredwr dot tebyg i ddulliau.
Gadewch i ni drosi 70 kg yn bunnoedd:
Mae yna hefyd gystrawen arall ar gyfer mewnforio modiwlau. Yn lle mewnforio'r modiwl cyfan, gallwn fewnforio swyddogaethau penodol o'r modiwl hwnnw. Gallwn deipio from Converters import
a gwasgwch “control + space” i ddangos y rhestr o swyddogaethau sydd ar gael. Gyda hyn, gallwn alw'r swyddogaeth hon yn uniongyrchol.
Ymarfer
Dyma eich ymarfer corff.
Mae hyn yn gysylltiedig ag ymarfer o'r ddarlith lle buom yn trafod “am ddolenni” lle buom yn ysgrifennu rhaglen i ddarganfod y nifer mwyaf o restr
numbers = [8, 3, 6, 10, 5]
max = numbers[0]
for number in numbers:
if number > max:
max = number
print(max)
Nid oes gan y cod hwn unrhyw sefydliad ar hyn o bryd. Nid oes gennym unrhyw swyddogaethau na modiwlau ac mae'r rhaglen wedi'i hysgrifennu mewn un ffeil. Mae hynny'n iawn ar gyfer rhaglenni bach ond wrth i'ch rhaglenni dyfu, mae angen i chi drefnu'ch cod yn gywir yn ddosbarthiadau a modiwlau. Felly, fel rhan o'r ymarfer hwn, rwyf am ichi ysgrifennu swyddogaeth, ei alw find_max
. Dylai'r swyddogaeth hon gymryd rhestr a dychwelyd y nifer mwyaf yn y rhestr honno. Ar ôl hynny, ewch ymlaen a rhowch y swyddogaeth hon mewn modiwl ar wahân, tynnwch ef o'r fan hon a'i roi mewn modiwl o'r enw utils
. Dylai'r modiwl hwn gynnwys criw o swyddogaethau cyfleustodau. Mewnforio y utils
modiwl i mewn i'r modiwl presennol a galwad find_max
swyddogaeth. Yn olaf, mynnwch y canlyniad a'i argraffu ar y derfynell.
Mae'r ymarfer hwn ychydig yn heriol ond mae'n hawdd ei wneud.
Ateb
Dechreuwch trwy ddiffinio swyddogaeth find_max
ac ychwanegu paramedr o'r enw rhifau. Y tu mewn i'r swyddogaeth hon, ysgrifennwch yr algorithm ar gyfer dod o hyd i'r rhif mwyaf mewn rhestr.
def find_max(numbers):
max = numbers[0]
for number in numbers:
if number > max:
max = number
return max
Arbedwch y cod hwn mewn ffeil “utils.py” fel modiwl.
Yn ôl i'n prif raglen, mewnforiwch y modiwl trwy'r naill gystrawen neu'r llall a gweithredwch y rhesymeg.
Un peth, mae angen i mi dynnu eich sylw ato yw'r rhai sydd wedi'u tanseilio max
. Y rheswm am hynny yw y max
yn swyddogaeth adeiledig yn Python ac rydym yn ei ailddiffinio. Felly dyma rybudd gan y Casglwr Python na allwn bellach ddefnyddio max fel ei swyddogaeth adeiledig.
Modiwlau Adeiledig yn Python
Daw Python gyda llyfrgell safonol sy'n cynnwys sawl modiwl ar gyfer tasgau cyffredin megis anfon e-byst, gweithio gyda dyddiad ac amser, cynhyrchu gwerthoedd ar hap a chyfrineiriau ac ati. Mae cymaint o fodiwlau eisoes wedi'u cynnwys yn Python sy'n golygu bod llawer o swyddogaethau eisoes y gallwn eu hailddefnyddio. Gallwch ddod o hyd i'r modiwlau hyn yma.
Pecynnau
Yn y bôn, mae pecynnau yn ffordd arall o drefnu ein cod ar ben y modiwlau. Gall prosiect go iawn gynnwys cannoedd neu hyd yn oed filoedd o fodiwlau a thros amser bydd ein cyfeiriadur yn cael ei chwyddo gyda chymaint o ffeiliau. Felly, dull gwell yw trefnu modiwlau cysylltiedig y tu mewn i becyn sy'n gwneud y pecyn yn gynhwysydd ar gyfer modiwlau lluosog.
Ychwanegir cyfeiriadur newydd at y prosiect ac ychwanegir yr holl fodiwlau cysylltiedig at y cyfeiriadur hwnnw. Fel enghraifft, meddyliwch am ganolfan siopa. Mae yna wahanol adrannau ar gyfer dillad dynion, menywod a phlant mewn canolfan siopa sydd fel pecynnau. Mae gan bob adran wahanol feysydd ar gyfer gwahanol fathau o gynnyrch fel esgidiau, crysau-t a siacedi. Meddyliwch am y rhain fel modiwlau.
Gadewch i ni weld, sut i greu a defnyddio pecynnau yn Python.
Yn gyntaf, ychwanegwch gyfeiriadur newydd o'r panel prosiect. Gadewch i ni ei alw'n “eFasnach”. Bydd y pecyn hwn yn cynnwys yr holl fodiwlau sy'n gysylltiedig â chymhwysiad eFasnach.
Mae'n dal i fod yn gyfeiriadur gwag ac i'w drosi'n becyn, mae angen i ni greu ffeil arbennig ynddo. Ychwanegu ffeil python newydd yn y cyfeiriadur hwn ac enwi'r ffeil honno “__init__”. Mae'n gonfensiwn arbennig yn Python a phan fydd y cyfieithydd Python yn gweld ffeil gyda'r enw hwn mewn cyfeiriadur, mae'n trin y cyfeiriadur hwn fel pecyn.
Mae gennym hefyd ddull amgen a chryno i greu pecyn. De-gliciwch ar banel y prosiect a chreu pecyn Python o'r rhestr. Enwch ef yn “eFasnach” a dyna ni. Bydd yn creu cyfeiriadur yn awtomatig gyda ffeil Python o'r enw “__init__”.
Nawr, gadewch i ni greu modiwl yn y pecyn a'i enwi'n “llongau”. Yn y modiwl hwn, gadewch i ni greu swyddogaeth syml ar gyfer cyfrifo costau cludo.
def calc_shipping():
print("calc_shipping")
Er mwyn cyrchu'r swyddogaeth hon yn ein prif fodiwl, mae'n rhaid i ni ei chyrchu trwy'r pecyn e-fasnach. Unwaith eto mae gennym ddau ddull i fewnforio'r modiwl hwn.
Yn y dull cyntaf, gallwn fewnforio'r modiwl cyfan ac yna galw swyddogaeth yn annibynnol fel hyn:
import eCommerce.shipping
eCommerce.shipping.calc_shipping()
Fodd bynnag, gyda'r dull hwn, mae galw un o'r swyddogaethau i'r modiwl hwn yn gofyn am ei ragddodi ag ef eCommerce.shipping.
Mae hynny'n llafar iawn. Felly, wrth weithio gyda phecynnau rydym yn aml yn defnyddio'r ail ddull ac yn defnyddio'r from
datganiad.
from eCommerce.shipping import calc_shipping
calc_shipping()
Os oes gennych chi swyddogaethau lluosog mewn un modiwl gallwch chi eu mewnforio i gyd mewn un llinell drwy ddefnyddio atalnodau rhyngddynt. Gadewch i ni ddweud bod swyddogaeth arall ar gyfer cyfrifo treth yn ein modiwl cludo. Bydd hwnnw'n cael ei fewnforio fel hyn:
from eCommerce.shipping import calc_shipping, calc_tax
Gallwch hefyd fewnforio modiwlau unigol a gadael swyddogaethau i'w galw yn ddiweddarach yn y rhaglen. Gadewch i ni fewnforio'r llongau modiwl ac yna defnyddio gweithredwr dot i alw'r swyddogaeth calc_shipping.
from eCommerce import shipping
shipping.calc_shipping()
Amlapio!
Mae Pecynnau a Modiwlau yn hynod bwysig yn Python. Yn enwedig, pan fyddwch chi eisiau gweithio gyda fframwaith fel Django a ddefnyddir ar gyfer adeiladu cymwysiadau gwe gyda Python. Byddwn yn edrych i mewn i Django yn ystod cwrs Python arall.
Hon oedd y ddarlith gonfensiynol olaf yn y gyfres hon. Bydd y ddarlith nesaf yn gwyro oddi wrth ein fformat arferol a byddwn yn dysgu rhai achosion defnydd pwysig yn Python. Bydd hynny’n nodi diwedd y gyfres hon a byddwn yn symud ymlaen i’n cyfres Python nesaf. Arhoswch diwnio am hynny.
Gadael ymateb