8 min lexim
Funksionet dhe fusha e veprimit
Funksionet i kemi përdorur që në fillim
Një funksion është një pjesë e vogël e programit, me një emër, që zgjidh një nënproblem të caktuar. Ti i ke përdorur që në leksionin e parë, ndoshta pa e vënë re.
Kujto rreshtat që ke shkruar tashmë:
len(mystring)të kthen gjatësinë e një vargu.turtle.forward(100)e lëviz robotin përpara.print(s1)shkruan një vlerë në ekran.
Secili prej tyre është një funksion që bën një punë për ty. Ti nuk e shkrove kodin që numëron shkronjat ose që lëviz breshkën; thjesht e thirre funksionin me emrin e tij dhe e le të bënte punën. Ky është qëllimi i një funksioni: i jep një emër një pune të dobishme, pastaj e ripërdor sa herë të duhet, pa u përsëritur.
Deri tani ke thirrur vetëm funksione që i kishte shkruar Python-i ose libraria e breshkës. Tani do të shkruash të tuat.
Si ta krijosh funksionin tënd
Një funksion krijohet me fjalën def, që vjen nga anglishtja "define", pra "përcakto". I jep një emër, rendit inputet që i duhen dhe e zhvendos me tab kodin që i përket.
def funksioni_im(arg1, arg2):
"""Shkruaj një përshkrim të shkurtër se çfarë bën ky funksion."""
# kodi yt vjen këtu
return nje_vlere
Ka disa pjesë që ia vlen t'i emërtojmë:
- Emri (
funksioni_im) është mënyra si do ta thërrasësh më vonë. - Argumentet (
arg1,arg2) janë inputet. Një argument është një vlerë që ia jep funksionit që të punojë me të. Një funksion mund të marrë zero argumente, një ose shumë. - Rreshti në thonjëza të trefishta është një docstring, një shënim i shkurtër që përshkruan ç'bën funksioni. Nuk është i detyrueshëm, por është dhuratë për veten tënde të nesërme.
returnia kthen një vlerë atij që e thirri funksionin. Mund të kthesh një numër, një varg, një listë, çfarëdo.
Përcaktimi i një funksioni nuk e vë atë në punë. Kodi brenda tij punon vetëm kur e thërret me emër:
def mblidh(a, b):
"""Kthen shumën e dy numrave."""
return a + b
totali = mblidh(3, 5)
print(totali) # 8
Këtu mblidh(3, 5) e thërret funksionin me argumentet 3 dhe 5. Funksioni kthen 8, dhe ne e ruajmë te totali. Nëse e përcakton një funksion, por nuk e thërret kurrë, kodi brenda tij thjesht nuk punon asnjëherë.
Një shembull i punuar: vizatimi i figurave
Funksionet vlejnë vërtet kur një funksion thërret një tjetër. Le të ndërtojmë hap pas hapi një vizatues figurash.
Së pari, një funksion që vizaton çdo shumëkëndësh të rregullt. Për të vizatuar një figurë me num_sides brinjë të barabarta, breshka rrotullohet me 360 / num_sides gradë në çdo kënd: 120 gradë për një trekëndësh, 90 për një katror, e kështu me radhë.
import turtle
def draw_shape(length, num_sides):
"""Vizaton një shumëkëndësh të rregullt me gjatësinë e brinjës dhe numrin e brinjëve të dhëna."""
angle = 360 / num_sides
for side in range(num_sides):
turtle.forward(length)
turtle.right(angle)
Tani draw_shape(100, 3) vizaton një trekëndësh dhe draw_shape(80, 4) vizaton një katror. Një funksion, shumë figura.
Më pas, një funksion që përdor të parin për të vizatuar dhjetë katrorë, secili pak më i madh se i mëparshmi:
def draw_increasing_squares():
"""Vizaton 10 katrorë, secili 10 hapa më i gjatë se ai para tij."""
length = 50
for i in range(10):
draw_shape(length, 4)
length = length + 10
draw_increasing_squares()
Vër re se draw_increasing_squares nuk di vetë ta vizatojë një katror. Ia lë atë punë draw_shape. Secili funksion bën një gjë të qartë, dhe puna e madhe ndërtohet nga ato të voglat. Kështu programet e vërteta rrinë të lexueshme edhe kur rriten.
Praktikë
Provoje: thirr draw_increasing_squares() një herë, pastaj ktheje breshkën djathtas me 10 gradë dhe thirre përsëri. Përsërite brenda një cikli që t'i hapësh katrorët si erashkë në një rreth të plotë. Sa kthesa nga 10 gradë bëjnë një rrotullim të plotë?
Ku jeton një variabël: fusha e veprimit
Kur krijon një variabël brenda një funksioni, ai i përket vetëm atij funksioni. Kjo quhet fusha e tij e veprimit. Sapo funksioni mbaron, variabli zhduket. Kodi jashtë nuk e sheh dot.
def pershendet():
mesazhi = "Përshëndetje nga brenda" # një variabël lokal
print(mesazhi)
pershendet()
print(mesazhi) # gabim: mesazhi nuk njihet këtu jashtë
Variabli mesazhi është lokal për pershendet. print-i i parë funksionon, sepse punon brenda funksionit. I dyti dështon, sepse jashtë funksionit mesazhi nuk ekziston.
Një variabël i krijuar në nivelin e sipërm të programit, jashtë çdo funksioni, është global. Funksionet mund ta lexojnë një vlerë globale, por një emër që krijon brenda një funksioni mbetet brenda tij:
angle = 90 # global
def trego_kendin():
print(angle) # mund ta lexojë vlerën globale
trego_kendin() # shkruan 90
Kjo është gjë e mirë, jo kufizim. Duke qenë se secili funksion i mban variablat e vet për vete, mund ta ripërdorësh një emër të thjeshtë si length ose i në shumë funksione pa u përplasur me njëri-tjetrin. Nëse do që një vlerë të dalë nga një funksion, jepja si argument ose ktheje me return, në vend që të mbështetesh te emra të përbashkët.
Provo veten
- Cili është ndryshimi mes përcaktimit të një funksioni dhe thirrjes së tij? Çfarë ndodh nëse e përcakton një funksion, por nuk e thërret kurrë?
- Te
draw_shape(length, num_sides), si quhenlengthdhenum_sides, dhe psedraw_increasing_squaresnuk ka nevojë të dijë vetë ta vizatojë një katror? - Nëse një variabël krijohet brenda një funksioni, a mund ta përdorë atë kodi jashtë funksionit? Si do ta nxjerrje një vlerë nga një funksion që ta përdorë pjesa tjetër e programit?
Nga vjen ky mësim
Ndërtuar mbi
- Programming in a Data World: Leksioni 4 (Funksionet) dhe fletorja e leksionit
- Video: 4.0 Functions
Kurset e alphaPlan ndërtohen mbi programe të zhvilluara në klasë, e nuk shpiken për web-in. Kur një pohim mbështetet mbi një standard të jashtëm ose mbi një rast të raportuar, ai emërtohet më sipër që ta kontrollosh vetë e të mos na besosh në fjalë.
Ky kurs u zhvillua nga alphaPlan Center mbi bazën e programeve të realizuara në partneritet me rrjetin American Corners.
Gjete diçka të paqartë, të vjetruar ose që mund të përmirësohet? Sugjero një përmirësim