Python - Funkcije


Šta je funkcija u Pythonu?

U Pythonu, funkcija je grupa povezanih izjava koje izvode određene zadatake. Funkcije pomažu razbiti naš program na manje i modularne dijelove. Kako naš program postaje sve veći i veći, funkcije ga čine sve organiziovanijim i upravljivijim. Izbjegava ponavljanje i čini kod ponovnom upotrebljivim.


Sintaksa funkcije u Python-u

def function_name(parameters):
  """docstring"""
  statement(s)

U primjeru je prikazana definicija funkcije koja se sastoji od sljedećih komponenati.

  • Ključna riječ def koja označava početak zaglavlja funkcije.
  • Ime funkcije za jedinstvenu identifikaciju funkcije. Imenovanje funkcija sljedi ista pravila kao pisanja identifikatora u Pythonu.
  • Parametri (arguments) kroz koje prosljeđujemo vrijednosti funkciji. Oni nisu obavezni.
  • Dvotačka (:) za označavanje kraja zaglavlja funkcije.
  • Izborni string dokumentacije (docstring) za opisivanje funkcije.
  • Jedan ili više valjanih python izraza koji čine tijelo funkcije. Izjave moraju imati isti nivo uvlačenja (obično 4 razmaka).
  • Neobavezna naredba return za vraćanje vrijednosti iz funkcije.

Primjer funkcije

def greet(name):
    """
    Funkcija greet
    persion je prošla kao
    parametar
    """
    print("Pozdrav, " + name + ". Dobro jutro!")


Kako pozvati funkciju u Python-u?

Nakon što definišemo funkciju, možemo je pozvati iz druge funkcije, programa ili čak Python upita. Da bismo pozvali funkciju, jednostavno upišemo ime funkcije s odgovarajućim parametrima.

>>> greet('Miloš')
Pozdrav, Miloš. Dobro jutro!
def greet(name):
    """
    Funkcija greet
    person je prošla kao
    parametar
    """
    print("Pozdrav, " + name + ". Dobro jutro!")

greet('Miloš')


Docstrings

Prvi string nakon zaglavlja funkcije naziva se docstring i kartica je za string dokumentacije. Ukratko se koristi za objašnjenje funkcije. Iako je neobavezna, dokumentacija je dobra praksa programiranja. Ako se ne sjećate što ste radili prošle sedmice, uvijek dokumentiujte svoj kod kako biste znali. U gornjem primjeru imamo docstring odmah ispod zaglavlja funkcije. Obično koristimo trostruke navodnike tako da se niz dokumenata može proširiti na više redova. Ovaj string nam je dostupan kao __doc__ atribut funkcije. Pokušajte pokrenuti sljedeći kod u Python shell da vidite koji će izlaz biti.

>>> print(greet.__doc__)

    Funkcija greet
    person je prošla kao
    parametar


Izjava return

Izraz return koristi se za izlazak iz funkcije i povratak na mjesto odakle je pozvana.


Sintaksa return može se napisati kao:
return [expression_list]

Ova izjava može da sadrži izraz koji se procjenjuje i vraća vrijednost. Ako u izrazu nema izraza ili sam izraz return nije prisutan unutar funkcije, tada će funkcija vratiti objekt None. Pogledajmo primjer:

>>> print(greet("Miloš"))
Pozdrav, Miloš. Dobro jutro!
None

Ovdje je None vraćena vrijednost jer greet() direktno ispisuje ime i ne koristi se naredba return.


Primjer izjave return

def absolute_value(num):
    """Ova funkcija vraća apsolutnu
     vrijednost unesenog broja"""

    if num >= 0:
        return num
    else:
        return -num

print(absolute_value(2))
print(absolute_value(-4))


Kako funkcije rade u Python-u?





Opseg (Scope) i vijek trajanja (Lifetime) varijabli

Opseg (Scope) varijable je dio programa u kojem se varijabla prepoznaje. Parametri i varijable definisani unutar funkcije nisu vidljivi izvan funkcije. Dakle, oni imaju lokalni opseg. Životni vijek varijable je period kroz koji varijabla izlazi u memoriju. Životni vijek varijabli unutar funkcije je onoliko koliko se funkcija izvršava. Oni se uništavaju kada se vratimo iz funkcije. Zbog toga funkcija ne pamti vrijednost varijable iz prethodnih poziva. Evo primjera za ilustraciju opsega (scope) varijable unutar funkcije.

def my_func():
  x = 10
  print("Vrijednost unutar funkcije:",x)

x = 20
my_func()
print("Vrijednost izvan funkcije:",x)

Ovdje možemo vidjeti da je vrijednost x u početku 20. Iako je funkcija my_func() promijenila vrijednost x na 10, to nije uticalo na vrijednost izvan funkcije. To je zato što se varijabla x unutar funkcije razlikuje od one vanjske. Iako imaju ista imena, to su dvije različite varijable s različitim opsegom (scope).

S druge strane, varijable izvan funkcije vidljive su iznutra. Imaju globalni opseg (scope). Te vrijednosti možemo čitati iz funkcije, ali ih ne možemo mijenjati. Da bi se promijenila vrijednost varijabli izvan funkcije, moraju se deklariaati kao globalne varijable pomoću ključne riječi global.