Computer Science Fakultet U D A C I T Y

Discussion in 'Operativni sistemi, aplikacije i programiranje' started by Mujka, Apr 16, 2012.

  1. kolinsb

    kolinsb Veteran foruma

    pozdrav raja :) ev' mene opet. zadao sam se u ovo, pa imam jos neko pitanje. naime imam jednostavnu proceduru. evo napisem i kod

    Code:
    def ispis_liste(lista):
         for clan in lista:
              return clan
    
    neka je lista=[[1,2,3],[2,3,1],[2,3,4]]

    zasto mi ova procedura vraca samo prvi clan liste, tj. [1,2,3]?
    zar ne bi trebala da vraca sve clanove? tj da ispis izgleda kao:

    Code:
    [1,2,3]
    [2,3,1]
    [2,3,4]
    
     
  2. selvin

    selvin Moderator

    Pa funkcija jednom vrati vrijednost i to je kraj izvrsenja. Ako radis ispis, kako se ta funkcija zove, onda tu radi print umjesto return.
     
  3. kolinsb

    kolinsb Veteran foruma

    to mi je malo nelogicno, al' eto. sad sam i to razgranicio. isto bih dobio i sa while petljom.
     
  4. selvin

    selvin Moderator

    Pa nije nelogicno, funkcija i treba da samo jednom vrati vrijednost. Kako bi inace dohvatio te podatke iz nje. Ako kazes x = funkcija(y). I ako y stalno vraca vrijednost, kako ces onda manipulisati sa x? Ne moze se mijenjati izvrsavanje malo glavnog programa, malo funkcije. Gledaj je samo kao dio koda koji se izvrsi i rezultat se vrati u main program koji nastavi dalje. Postoje neke druge funkcionalnosti koje mogu obezbijediti da funkcija kako se izvrsava stalno vraca rezultat u main program, ali to su vise advanced stvari i nisu ni moguce (koliko ja znam) u proceduralnim programskim jezicima.
     
  5. kolinsb

    kolinsb Veteran foruma

    ako sam dobro shvatio, ako radim return u blocku for petlje (ili while), a ta se for (while) nalazi u blocku procedure, petlja ce odvrtiti samo prvi krug i odraditi return, i stati, jer je vec dobila neku vrijednost koju moze da vrati?
     
  6. selvin

    selvin Moderator

    Cim se dodje do return vraca se u main program, nije bitno gdje je. Njeg mozes koristiti kao izlaz iz funkcije prilikom neke greske, lupam: Imas funkciju koja treba da vrati neki broj veci od nule, nebitno sta, i recimo mozes unutra ispitat ako se desi neka greska da vrati -1. Npr. imas niz pozitivnih brojeva i hoces da nadjes max sto si imao za primjer. Napises funkciju koja nalazi max, ali recimo ako joj je proslijedjen niz necega sto nisu brojevi, samo uradis return -1. Tj. return ne mora striktno znaciti da je rezultat, a pogotovo ne znaci da je to ispis. Ispis se vecinom radi u main programu jer tu formatiras rezultat koji funkcija vrati. Osim ako funkcija ne sluzi za ispis, onda ispisujes u njoj :) Postoji i return koji ne vraca nista, samo vraca izvrsavanje u main program. To je slucaj u funkcijama koje ne vracaju nista, samo sluze kao dio koda koji si izdvojio da se izvrsava, jer ces ga stalno pozivati. Pa ako ti negdje treba da se vratis u main, samo pozoves return.
    Uglavnom posmatraj kod da se izvrsava redom main program liniju po liniju, kad se dodje do funkcije, onda se ide linija po linija u funkciji, kad se dodje do return nastavlja se od one linije u main programu gdje je pozvana funkcija. Isto tako npr. u petlji kad se dodje do break izlazi se iz petlje i nastavlja se linija ispod.
     
  7. AhmeT

    AhmeT Overclocker

    ^this :)

    Ukratko verzija: Cim dodjes do return, funkcija se zavrsava. Evo primjercic jedan koji ilustrira fino ovo:
    Code:
    def paran_broj(x):
        if x%2==0:
            return True
        return False
    Ovo je fin primjer jer npr imas ovo return False na samoj liniji, i da neko ne zna da return izlazi iz funkcije konto bi "hej pa sta je ovo, dva returna", a zapravo ako je broj paran (daje 0 ako se dijeli sa dva) odma se vraca True i izlazi iz funkcije, a ako ne dodje do izvrsavanja stvari u if onda se vrati False.

    Code:
    def paran_broj(x): return True if x%2==0 else False
    (kod je moguce malo i skratiti :))
     
  8. kolinsb

    kolinsb Veteran foruma

    kod je moguce jos skratiti :D

    dovoljno je samo napisati
    Code:
    x%2==0
    rezultat za x=10 ce biti True, a za x=11 ce biti False :)