Package Pythonis

Mis on moodul?

Moodul on Pythoni fail, mille sees on erinevad klassid, funktsioonid, kirjed. Põhimõtteliselt võib peagi igast Pythoni failist mõelda kui moodulist. Näide: (fibo.py)

# Fibonacci numbers module

def fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

def fib2(n):   # return Fibonacci series up to n
    result = []
    a, b = 0, 1
    while a < n:
        result.append(a)
        a, b = b, a+b
    return result

Nüüd teises failis saame teha nii:

import fibo

fibo.fib(1000)
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

res = fibo.fib(100)
print(res)
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

print(fibo.__name__)
# "fibo"

Mis on package?

Pythonis, package on edasiarendus moodulist, see on viis kuidas saab faile struktureerida hierarhiliselt, et saavutada paremat koodi taaskasutust ja lugevust. Packageit eristab moodulist faili __init__.py olemasolu, milles saame täpselt märkida, mida see moodul annab endast importida.

TLDR: Pythoni moodul hoiab klasse, funktsioone, muutujaid jms, kuid package hoiab endas mitmeid mooduleid. Lühidalt package pythonis on kaust milles on mitu moodulit.

Packagei loomine

Alustame tühja Python projektiga. Teeme projektis kausta mypckg. Tekitame sinna kausta failid mod1.py, mod2.py

Fail mod1.py:

def welcome():
    print("Welcome to module1")

Fail mod2.py

def sum(a, b):
    return a + b

__init__.py-st aru saamine

__init__.py aitab Pythonil aru saada, et antud kaust on package. See fail samuti näitab, et millised elemendid moodulitest antud package impordib (ehk milliseid moodulite osi saame package importimisel kasutada).

Tekitame nüüd varem tehtud kausta mypckg faili __init__.py:

from .mod1 import welcome
from .mod2 import sum

Antud faili sisu näitab meile, et importides seda packageit saame importida vaid antud kaks funktsiooni, mida package omakorda impordib selles olevatest moodulitest.

Kuidas kasutatakse packageid?

Kasutame nüüd kuskil failis meie tekitatud packagei.

from mypckg import mod1
from mupckg import mod2

mod1.welcome()
res = mod2.sum(1, 2)
print(res)
# 3

Nagu eelmises koodijupis näha, siis me importisime packageist mypckg mooduleid mod1 ja mod2, ning kasutasime imporditud mooduli mod2 funktsiooni sum.

Mooduli importimisel (nii packageist kui ka üldiselt) saab sellele seadistada nime:

from mypckg import mod1 as module1
from mypckg import mod2 as math_funcs

module1.welcome()
sum_val = math_funcs.sum(3, 5)
print(sum_val)
# 8

import math as abracadabra
print(abracadabra.pi)
# 3.14......

Samuti, kui on vaja importida kõik moodulid packageist, võib kasutada alljärgnevat süntaksi:

from mypckg import *

mod1.welcome()
res = mod2.sum(1, 2)
print(res)
# 3

Või kui on vaja importida kõik funktsioonid, muutujad, klassid moodulist, siis saab kasutada analoogilist süntaksi:

from math import *

print(pi)
# 3.14......

Võimalus on importida ka vaid teatud osi moodulist

from math import factorial, log

print(factorial(4))
# 24

print(log(2.7183))
# 1.0000066849139877

Lisalugemist