Kalo te përmbajtja

8 min lexim

American Corners

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.
  • return ia 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

  1. 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ë?
  2. Te draw_shape(length, num_sides), si quhen length dhe num_sides, dhe pse draw_increasing_squares nuk ka nevojë të dijë vetë ta vizatojë një katror?
  3. 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