Pozivanje funkcija

Python omogućuje raznovrsne načine pozivanja funkcija:

  • argumentima prema poziciji (kao u C-u)
  • argumentima prema ključnoj riječi
  • postavljanjem default vrijednosti za argumente
  • pretvaranjem pozicijskih argumenata u tuple i obratno (*)
  • pretvaranjem argumenata s ključnim riječima u dictionary i obratno (**)

Pogledajmo primjere:

>>> def f(a,b=20000,c=30000,d=40000): print(a,b,c,d) 
>>> 
>>> f(100,2,3,4) #svi navedeni pozicijski
100 2 3 4
>>> 
>>> f(101,2,d=3,c=4) #svi navedeni: neki pozicijski a neki preko ključnih riječi
101 2 4 3
>>> 
>>> f(102,**{'c':4,'b':5}) #pomoću ** dict se pretvori u klj. rij. a za one argumente koji nisu poslani postoji default vrijednost 
102 5 4 40000
>>> 
>>> f(**{'c':4,'a':103}) #slično kao prije
103 20000 4 40000
>>> 
>>> #f(b=1) #zabranjeno jer a nije naveden a nema default vrijednost
>>> def f( *args, **kwargs ): print(f"args={args} kwargs={kwargs}") 
>>> 
>>> f(100,2) # pretvaranje iz pozicijskih u tuple args
args=(100, 2) kwargs={}
>>> 
>>> f(a=101,b=2) #pretvaranje iz argumenata s ključnim riječima u dict 
args=() kwargs={'a': 101, 'b': 2}
>>> 
>>> f(102,2,a=3,b=4) #kombinacija prethodna dva primjera
args=(102, 2) kwargs={'a': 3, 'b': 4}
>>> 
>>> #f(103,a=2,3,b=4) #zabranjeni pozicijski (3) poslije ključnih riječi (a=...)
>>> 
>>> f(104,2,*(3,4),a=5,b=6) #pretvaranje iz tuple (3,4) u poz., a zajedno s prva dva pozicijska u tuple args
args=(104, 2, 3, 4) kwargs={'a': 5, 'b': 6}
>>> 
>>> f(105,2,*(3,4),a=5,b=6,**{'c':7,'d':8}) #pretvaranje iz dict u klj. rij., zatim sve klj. rij. a=5,b=6,c=7,d=8 u dict kwargs
args=(105, 2, 3, 4) kwargs={'a': 5, 'b': 6, 'c': 7, 'd': 8}

Moguće je i kombinirati:

def f( a, b=20000, *args, **kwargs ): 
  print(f"a={a} b={b} args={args} kwargs={kwargs}") 

f(100,q=11,w=22,e=33)
f(100,200,1,2,3,q=11,w=22,e=33)
a=100 b=20000 args=() kwargs={'q': 11, 'w': 22, 'e': 33}
a=100 b=200 args=(1, 2, 3) kwargs={'q': 11, 'w': 22, 'e': 33}

Jednostavna primjena u odjeljku Rješenje 4 u rješenjima zadaća.

Više na: