Professional Documents
Culture Documents
Funkcije
Smjer: Održavanje računalnih sustava
Nastavnik: Vladimir Bralić pred., mag. inf.
>>> a="slova"
>>> b=5 Funkciji type predan je objekt imena „a”
>>> type(a)
<class 'str'>
>>> type(b) Funkcija je vratila poruku
<class 'int'> o podatkovnom tipu
>>> float(b) objekta „a”.
5.0
Uvod u funkcije (2)
• Funkcije su „mali” programi tj. blokovi koda koje glavni
program po potrebi može pozvati.
naziv_funkcije()
Ulazni parametri funkcije (2)
• Ako funkcija prima jedan parametar, unutar zagrada
se nalazi naziv parametra koji će se koristiti unutar
funkcije:
naziv_funkcije(ulazniBroj)
naziv_funkcije(prviParametar, drugiParametar)
Ulazni parametri funkcije (3)
• Predani parametri se prevode u interne vrijednosti
funkcije prema redoslijedu kojim su predani pri
pozivu funkcije i definiciji funkcije.
def funkcija( a, b, c ):
print(a,b,c)
Unutar funkcije:
a=2
b=3
funkcija (2, 3, 1) c=1
Parametar i argument
• Kada govorimo o ulaznim podacima funkcije (ili
metode) često pojavljuje i termin argument.
• U kontekstu funkcija termini nisu striktno definirani (od
strane lingvista) ali, u računarstvu, razlikujemo termin
parametar od argumenta:
• Parametar se odnosi na formalnu definiciju ulaznog
podatka.
• Argument se odnosi na sam podatak koji je predan
funkciji.
• Ovi termini se često koriste kao sinonimi, ili se koristi
samo jedan ili drugi. Ako nije nužno naglasiti razliku, na
ovom kolegiju koristimo termin parametar za oba
značenja.
Vraćanje vrijednosti iz funkcije
• Vrijednosti iz funkcije moguće je vratiti na mjesto
poziva funkcije pomoću ključne riječi return.
rezultat = funkcija(a, b, c)
Vraćanje vrijednosti iz funkcije (2)
• Iz funkcije je moguće vratiti više od jedne
vrijednosti upotrebom liste ili n-torke.
def najveciOdTri(a,b,c):
najveci=a
if najveci<b:
najveci=b
if najveci<c:
najveci=c
return najveci
Primjer poziva funkcije -
najveciOdTri
prviBroj=input("Unesite prvi broj: ")
drugiBroj=input("Unesite drugi broj: ")
treciBroj=input("Unesite treci broj: ")
rezultat=najveciOdTri(prviBroj,drugiBroj,treciBroj)
x=int(input("stranica a: "))
y=int(input("stranica b: "))
print("povrsina je:",pov(x,y))
Ulazni podaci
• Kod prijenosa parametara (tj. argumenata) u
funkciju njihova vrijednost se kopira na drugu
lokaciju u memoriji i unutar funkcije se koristi ta
kopirana vrijednost.
• To znači da sve promjene nad kopijom vrijednosti
neće utjecati na originalnu vrijednost iz dijela
programa iz kojeg je pozvana funkcija i predana
ulazna vrijednost.
• Taj način prenošenja parametra se često naziva i
„call by value”.
Parametri (2)
def funkcija(a):
a+=1
return a
a=10
print(a)
print(funkcija(a))
print(a)
Funkcije – zadani parametri
• Funkcije mogu unaprijed odrediti parametre (engl.
default value) za slučaj da ih program koji poziva
funkciju ne proslijedi.
def imeFunkcije([paramtar=vrijednost]*):
Funkcije – zadani parametri (2)
• Primjer prikazuje upotrebu unaprijed zadane
vrijednosti za funkciju koja računa y potenciju broja x.
def pot(x,y=2):
return x**y
print (pot(3))
print (pot(3,3))
Funkcije – nepoznati broj
parametra
• Funkcija može primiti nepoznati broj parametra.
• Ukoliko želimo koristiti ovu funkcionalnost zadnji
parametar u funkciji označavamo sa *.
• Svi parametri koji su poslani funkciji ali nisu dodijeljeni
ranijim parametrima biti će smješteni u ovaj, zadnji,
parametar koji je tipa n-torka (engl. tuple).
• Sintaksa za nepoznati broj parametara je:
def imeFunkcije([*parametar]):
Funkcije – nepoznati broj
parametra (2)
• Donji primjer funkcije prima nepoznati broj
parametara te ih ispisuje.
<class'tuple'>
def varl(*y):
3
print(type(y))
---------------
for x in y:
<class 'tuple'>
print(x)
3
5
varl(3)
brod
print("-"*15)
12
varl(3,5,"brod",12)
Globalne i lokalne varijable
• Varijable koje su definirane unutar funkcije zovu se lokalne varijable i
mogu se koristiti samo unutar funkcije.
• Svi ulazni parametri, osim listi, su lokalni.
• Ovo znači da te varijable ne možemo referencirati iz programa koji je
pozvao funkciju (niti iz drugih funkcija koje je pozvao program).
a=10
a=funkcija(a)
print(a)
print(d)
• Varijabla „d” nije vidljiva izvan funkcije, štoviše u gornjem slučaju ona u
trenutku poziva više ni ne postoji. Gornji program vraća grešku.
• Primjer u PythonTutoru.
Globalne i lokalne varijable (4)
• Globalne varijable ne možemo promijeniti (iz funkcije) tako da pozovemo
njihovo ime. Npr.:
def funkcija():
a+=1 #promjena globalne varijable
funkcija()
def funkcija():
global a
a+=1 #promjena globalne varijable
funkcija()
print("Globalni a je",a)
• PythonTutor primjer.
Memorijski okvir funkcije
• U Pythonu svaki poziv funkcije dobiva svoj
memorijski okvir (engl. frame) u koji se pohranjuju
lokalne varijable i koji se briše u trenutku kada
funkcija završi.
def funkcija(ua,ub):
l=[ua,ub]
return l
a='Ana'
b='Ivo'
izlaz=funkcija(a,b)
print (izlaz)
Python Tutor – funkcija koja vraća
listu
• Python Tutor – funkcija koja vraća listu.
Liste i funkcije (3)
• Primjer liste koja je predana funkciji, promijenjena u
funkciji i nikad vraćena.
• Iz ovog primjera vidljivo je da je vanjsku listu moguće
promijeniti unutar funkcije. Također listu nije bilo
nužno predati, ali je ovo preporučljiv način pisanja zbog
prenosivosti funkcije.
def funkcija(a):
a[0]='Maja'
a=['Ana','Ivo',3]
funkcija(a)
print (a)
Python Tutor – funkcija koja
mijenja globalnu listu
• Python Tutor – funkcija koja mijenja globalnu listu
1. zadatak
Napišite program koji učitava jedan prirodni broj s
tipkovnice i ispisuje znamenke učitanog prirodnog
broja počevši od krajnje desne znamenke.
def znamenkeNum(a):
while a>0:
print (a%10)
a//=10
def znamenkeStr(a):
sa=str(a)
i=len(sa)-1
while i>-1:
print (sa[i])
i-=1
2. zadatak
Napišite program koji učitava 10 cijelih brojeva u
listu.
lista=[]
while len(lista)<10:
lista.append(int(input("Unesite broj: ")))
print ("Aritmeticka sredina je:",arSr(lista))
3. zadatak
Napišite program koji generira i ispisuje slučajne
cijele brojeve iz raspona [0,10] dok se ne pojavi
(generira) nula.
Nakon što se pojavi nula program mora prekinuti
izvođenje.
Za generiranje broja napišite funkciju.
Funkcija mora vratiti generirani broj pozivatelju koji
će generirani broj ispisati ili prekinuti program (ako
se radi o nuli).
3. zadatak rješenje
def nasum():
from random import randint as ra
return ra(0,6)
while True:
a=nasum()
if a!=0:
print (a)
else:
break
4. zadatak
Napišite program koji će slučajnim odabirom brojeva
generirati 10 cjelobrojnih vrijednosti između 1 i 10,
te ih pohraniti u prvu listu.
Nakon toga je od korisnika potrebno zatražiti unos 10
cjelobrojnih vrijednosti koje također moraju biti
vrijednosti između 1 i 10, te ih spremiti u drugu listu.
Napišite funkciju „usporediListe“ koja prima oba dvije
liste i vraća koliko je brojeva korisnik pogodio. Osim
samih vrijednosti, kod usporedbe se moraju
poklapati i mjesta unutar liste.
4. zadatak rješenje
def usporediListe(a,b): from random import randint as ra
isti=0 for i in range(10):
listaA.append(ra(1,10))
for i in range(0,10):
if a[i]==b[i]: while len(listaB)<10:
listaB.append(int(input('Unesite broj: ')))
isti+=1
return isti r=usporediListe(listaA,listaB)
print(listaA)
print(listaB)
listaA=[] print(r)
listaB=[]
CodeRunner vježba iz funkcija
U CodeRunner vježbi pišete samo funkcije, dakle nije
potrebno pisati naredbe za unos i ispis podatka niti
za poziv funkcije.
Dakle u vježbi iz funkcija vaš kod počinje s ključnom
riječi def i završava s return.
Pri testiranju slobodno dodajte naredbe i izvan
funkcije ali predajte samo funkciju.
Pitanja?