## Kako pišemo module

Napišimo program, ki bo vseboval konstanto `odgovor`, ki bo imela vrednost 42, in funkcijo, ki računa Fibonaccijeva števila.

    odgovor = 42

    def fibonacci(n):
        a = b = 0
        for i in range(n):
            a, b = b, a+b
        return a

Program shranimo pod imenom fibo.py.

To je to. V drugem programu lahko rečemo

    import fibo
    print("Odgovor je", fibo.odgovor)
    print("Deseto Fibonaccijevo število pa je", fibo.fibonacci(10))

Tudi vse ostale finte, na primer, `from fibo import odgovor`, delujejo.

Modul ni nič drugega kot program, ki ga uvozimo.

Tudi vsi drugi programi, ki ste jih napisali doslej, so hkrati moduli: lahko jih uvozite. Pazite le na tole: ko modul uvozimo, se ta v resnici izvede, čisto tako, kot bi se izvajal program. Vse, kar se v tem programu-modulu definira, ostane definirano in se nahaja v modulovem imenskem prostoru. Vendar se zgodi tudi vse ostalo, kar piše v modulu: če pri izvajanju naleti na `print(“Foo”)` se bo ob uvozu modula izpisalo Foo. Če program-modul vsebuje klic funkcije (in ne le definicij), se bo ta funkcija poklicala tudi ob uvozu.

Kje Python išče module? Navadno v trenutnem direktoriju, poleg tega pa še v drugih. Na Windowsih v, recimo, `c:-packages`. Več o tem si lahko preberete v dokumentaciji.

Tudi sicer ne bomo rinili prav globoko v module, samo še eno stvar omenimo, da vas ne bo presenetila. Ko boste prvič uvozili modul, se bo poleg datoteke s končnico .py pojavila še ena, z enakim imenom, a končnico .pyc. Python si vanjo “prevede” (pravzaprav bi smeli pisati brez narekovajev, temu se v resnici reče prevajanje) v obliko, v kateri ga bo lahko naslednjič hitreje uvozil. Pri manjših modulih se to ne pozna, pri velikem številu velikih modulov pa. Če vas moti, jo lahko pobrišete; drugič se bo pač spet pojavila ponovno.