# Funkcije in njihovi parametri

def f(x, y, z):
    """Ta funkcija ni uporabna.
    
    Če bi imeli kaj več povedati o tej funkciji,
    bi bila dokumentacija precej daljša.
    """
    if x < y:
        return 42
    elif x > 5:
        return (z + 16)
    else:
        return z * z + 1

def g(x, y, z=15):
    return (x, y, z)

v = g(10, 20, 30)
v = g(10, 20) # z ima privzeto vrednost 15
v = g(y=10, x=5, z=30) # parametre nastavimo po njihovih imenih

# Lokalne spremenljivke
def h(x):
    y = 10 # lokalna spremenljivka, vidna samo v h
    y = y + x
    return y

# Lokalne spremenljivke

# Globalni x
x = 10

def lala(u):
    x = 20 # ta x je lokalen znotraj lala in nima veze z zunanjim
    return (u + x)

r = lala(100)
# Zdaj je x = 10

# *args in **kwargs
# To bomo naredili, ko predelamo slovarje.

# Funkcije v funkcijah

def f(a, b, c):
    g = 6.67408e-11 # gravitacijska konstanta

    # Funkcija h je definirana samo v tukaj, znotraj f
    def h(u, v):
        # Na tem mestu so vidni parametri a, b, c in spremenljivka g
        return a * u + g * v

    x = h(10, 20)
    y = h(3, c)
    return x + y

def foo(x,y):

    def bar(z):
        print ("Lep pozdrav!")
        return (100 * x + 10 * y + z)

    print ("Dobro jutro.")
    a = bar(1)
    b = bar(2)
    print (a * b)