Vodič za Pajton 2.6/Definisanje funkcija
Stvaranje funkcija
[uredi]Za početak ovog poglavlja daću Vam primer toga šta biste mogli da uradite a ne bi trebalo (pa ne kucajte ovo):
a = 23
b = -23
if a < 0:
a = -a
if b < 0:
b = -b #Или користите команду: elif (if+else)
if b > 0:
elif:
print("Добро")
print("Не")
izlaz je:
Апсолутне вредности 23 или 23 су једнаке
Program se izgleda malo ponavlja. Programeri ne vole da ponavljaju stvari -- za to su ipak računari stvoreni! (Imajte na umu da je pronalaženje apsolutne vrednosti promenilo vrednost promenljive, zato štampa 23, a ne -23 u izlazu.) Na sreću, Pajton Vam dozvoljava da stvorite funkciju da uklonite duplikate. Ovde je prepisan primer:
def апсолутна_вредност(n):
if n < 0:
n = -n
return n
a = 23
b = -23
if апсолутна_вредност(a) == апсолутна_вредност(b):
print "Апсолутне вредности", a, "и", b, "су једнаке"
else:
print "Апсолутне вредности", a, "и", b, "су различите"
pa je izlaz:
Апсолутне вредности 23 и -23 су једнаке
Ključna karakteristika ovog programa je def
izjava. def
(ukratko definisanje) počinje definisanje funkcije. def
je praćeno imenom funkcije апсолутна_вредност
. Zatim dolazi '(' praćeno parametrom n
(n
je prošao
program u funkciji kada se pozove funkcija). Izjave posle ':'
se izvršavaju kada se koristi funkcija. Izjave se nastavljaju dok
se uvučeni izrazi završavaju ili je naišao na
return
. return
izjava vraća vrednost
nazad na mesto gde je pozvana funkcija.
Imajte na umu kako se vrednosti a
i b
ne menjaju.
Funkcije se mogu koristiti da ponove zadatke koji ne vraćaju
vrednosti. Ovde su neki primeri:
def здраво():
print "Здраво"
def површина(w, h):
return w * h
def штампај_добродошли(име):
print "Добродошли", име
здраво()
здраво()
штампај_добродошли("Фред")
w = 4
h = 5
print "ширина =", w, "висина =", h, "површина =", површина(w, h)
sa izlazom:
Здраво Здраво Добродошли Фред ширина = 4 висина = 5 површина = 20
Primeri pokazuju još neke stvari koje možete uraditi sa funkcijama. Primetite da možete koristiti bez argumenata, sa dva ili više. Obratite pažnju i kada funkcija ne treba da vrati vrednost, vraćanje nije obavezno.
Promenljive u funkcijama
[uredi]Kada eliminisanje ponavlja kod,često imate promenljive u ponovljenom kodu. U Pajtonu, oni su se bavili na poseban način. Do sada sve viđene promenljive su globalne promenljive. Funkcije imaju posebnu vrstu promenljivih nazvanu lokalne promenljive. Ove promenljive postoje dok se funkcija pokreće. Kada lokalna promenljiva ima ime kao druga promenljiva (kao što je globalna promenljiva), lokalna promenljiva krije drugu. Zvuči zbunjujuće? Pa, ovi sledeći primeri (koji su pomalo neprirodni) bi trebalo da pomognu da razjasne stvari.
a = 4
def штампај_функ():
a = 17
print "у штампај_функ a = ", a
штампај_функ()
print "a = ", a,"што је глобална променљива додељена пре функције штампај_функ"
Kada se pokrene, dobijamo ovakav izlaz:
у штампај_функ a = 17 a = 4 што је глобална променљива додељена пре функције штампај_функ
Promenljive zadate unutar funkcije ne zamenjuju globalnu promenljivu, one
postoje samo unutar funkcije. Iako je a
dobilo novu vrednost u
funkciji, ova nedavno dobijena vrednost je bila relevantna samo штампај_функ
, kada
funkcija završi pokretanje, i vrednost a
je ponovo štampana, vidimo
prvobitno dodeljene vrednosti.
Složeni primer
[uredi]a_пром = 10
b_пром = 15
c_пром = 25
def a_функ(a_пром):
print "у a_функ a_пром = ", a_пром
b_пром = 100 + a_пром
d_пром = 2 * a_пром
print "у a_функ b_пром = ", b_пром
print "у a_функ d_пром = ", d_пром
print "у a_функ c_пром = ", c_пром
return b_пром + 10
c_пром = a_функ(b_пром)
print "a_пром = ", a_пром
print "b_пром = ", b_пром
print "c_пром = ", c_пром
print "d_пром = ", d_пром
Izlaz je:
у a_функ a_пром = 15 у a_функ b_пром = 115 у a_функ d_пром = 30 у a_функ c_пром = 25 a_пром = 10 b_пром = 15 c_пром = 125 d_пром = Траг (послењи позив): Фајл "C:\Python24\def2", line 19, in -toplevel- print "d_пром = ", d_пром NameError: име 'd_пром' није дефинисано
U ovom primeru promenljive a_пром
, b_пром
, i d_пром
su lokalne promenljive kada su unutar funkcije a_функ
.
Posle pokretanja izjave return b_вар + 10
, sve one prestaju da
postoje. Promenljiva a_пром
je automacki lokalna promenljiva otkad je
to ime ime parametra. Promenljive b_пром
i d_пром
su lokalne
promenljive otkad se pojave na levoj strani znaka jednakosti u funkciji u
izjavama b_пром = 100 + a_пром
i d_пром = 2 * a_пром
.
Unutar funkcije a_пром
nema vrednost koja joj je dodeljena. Kada se
funkcija pozove sa c_пром = a_функ(b_пром)
, 15 je dodeljeno
a_пром
jer u tom trenutku b_пром
je 15, pravi se
poziv funkcije a_функ(15)
. Ovo se završava podešavanjem
a_пром
u 15 kada je unutar a_функ
.
Kao što možete da vidite, jednom kada funkcija završi sa radom, lokalne promenljive
a_пром
i b_пром
koje su sakrile globalne promenljive istog
imena su nestale. Onda izjava print "a_пром = ", a_пром
štampa
vrednost 10
a ne vrednost 15
pošto je lokalna varijabla
koja je sakrila globalnu promenljivu nestala.
Još jedna stvar koju treba primetiti jeste NameError
koja se dešava na kraju.
Ovo izgleda da promenljiva d_пром
više ne postoji otkad je
a_функ
završena. Sve lokalne promenljive su izbrisane kada funkcija
postoji. Ako želite da dobijete nešto iz funkcije, onda ćete morati da koristite
return нешто
.
Jedna poslednja stvar za primetiti je da vrednost c_пром
ostaje nepromenjena
unutar a_функ
otkad nije parametar i nikad se ne pojavi na levoj
strani znaka jednakosti unutar funkcije a_функ
. Kada je
globalna promenljiva dostupna u funkciji to je globalna promenljiva
spolja.
Funkcije dozvoljavaju lokalne promenljive koje postoje samo u funkciji i koje mogu sakriti i druge varijable koje su van funkcije.
Primeri
[uredi]temperatura2.py
# претвара температуру из фаренхајта у целзијус
def штампај_опције():
print "Опције:"
print " 'p' Опције за штампање"
print " 'c' Претварање из целзијуса"
print " 'f' Претварање из фаренхајта"
print " 'q' Напусти програм"
def целзијус_у_фаренхајт(c_темп):
return 9.0 / 5.0 * c_темп + 32
def фаренхајт_у_целзијус(f_темп):
return (f_темп - 32.0) * 5.0 / 9.0
избор = "p"
while избор != "q":
if избор == "c":
темп = input("Температура у целзијусу: ")
print "Фаренхајт:", целзијус_у_фаренхајт(темп)
elif избор == "f":
temp = input("Температура у фаренхајтима: ")
print "Целзијус:", фаренхајт_у_целзијус(темп)
elif избор == "p":
штампај_опције()
избор = raw_input("опција: ")
Sample Run:
Опције: 'p' Опције за штампање 'c' Претварање из целзијуса 'f' Претварање из фаренхајта 'q' Напусти програм опција: c Температура у целзијусу: 30 Фаренхајт: 86.0 опција: f Температура у фаренхајтима: 60 Целзијус: 15.5555555556 опција: q
površina2.py
# Од стране Амоса Сатерлија
print
def здраво():
print 'Здраво!'
def површина(ширина, висина):
return ширина * висина
def штампај_добродошлицу(име):
print 'Добродошли,', име
име = raw_input('Ваше име: ')
здраво(),
штампај_добродошлицу(име)
print
print 'Наћи површину правоугаоника,'
print 'укуцај ширину и висину изнад.'
print
w = input('Ширина: ')
while w <= 0:
print 'Мора бити позитиван број'
w = input('Ширина: ')
h = input('Висина: ')
while h <= 0:
print 'Мора бити позитиван број'
h = input('Висина: ')
print 'Ширина =', w, 'Висина =', h, 'Површина =', површина(w, h)
Primer:
Ваше име: Џош Здраво! Добродошли, Џоше Наћи површину правоугаоника, укуцај ширину и висину изнад. Ширина: -4 Мора бити позитиван број' Ширина: 4 Висина: 3 Ширина = 4 Висина = 3 Површина = 12
Vežbe
[uredi]Prepraviti površina2.py program iz Primeri iznad da biste razdvojili funkcije za površinu na kvadrat, površinu pravougaonika, i površinu kruga (3.14 * радијус ** 2
). Ovaj program treba da sadrži interfejs menija.
Prepraviti površina2.py program iz Primeri iznad da biste razdvojili funkcije za površinu kvadrata, površinu pravougaonika, i površinu kruga (3.14 * радијус ** 2
). Ovaj program treba da sadrži interfejs menija.
def квадрат(дужина):
return дужина * дужина
def правоугаоник(ширина , висина):
return ширина * висина
def круг(радијус):
return 3.14 * радијус ** 2
def опције():
print
print "Опције:"
print "s = рачуна површину квадрата."
print "c = рачуна површину круга."
print "r = рачуна површину правоугаоника."
print "q = изађи"
print
print "Овај програм ће рачунати површину квадрата, круга или правоугаоника."
избор = "x"
опције()
while избор != "q":
избор = raw_input("Унесите Ваш избор: ")
if избор == "s":
дужина = input("Дужина квадрата: ")
print "Површина овог квадрата је", квадрат(дужина)
опције()
elif избор == "c":
радијус = input("Радијус круга је: ")
print "Површина круга је", круг(радијус)
опције()
elif избор == "r":
ширина = input("Ширина правоугаоника је: ")
висина = input("Висина правоугаоника је: ")
print "Површина правоугаоника је", правоугаоник(ширина, висина)
опције()
elif избор == "q":
print "",
else:
print "Непозната опција."
опције()