Osnovni vgrajeni tipi

Vsaka vrednost v Pythonu ima svoj tip oziroma razred (ti dve besedi sta včasih v Pythonu imeli različna pomena, zdaj pa pomenita isto reč), ki opisuje njene osnovne lastnosti.

Tipi števil int in float

Videli smo že, da zna Python računati tako s celimi števil kot s števili s plavajočo vejico. Prva pripadajo tipu int (integer), druga pa tipu float (floating point number). Razlika med njimi je vidna že na pogled, saj se druga prikazujejo z decimalno piko. Število, v katerem uporabimo decimalno piko, je tipa float tudi takrat, ko so vse decimalke enake nič. Če računamo s celimi števili, vedno uporabljamo vrednosti tipa int, saj pri tipu float prihaja do zaokrožitvenih napak:

>>> 7.0 ** 360 / 7.0 ** 342
1628413597910448.8
>>> 7 ** 18
1628413597910449

Pri zgornjem primeru smo res uporabili zelo velika števila, da smo dobili majhno napako, vendar je to zaradi tega, da smo imeli enostaven primer. Običajni izračuni so daljši, zato se tudi napake začnejo hitreje nabirati.

Tip kompleksnih števil complex

Python pozna tudi kompleksna števila tipa complex, ki jih pišemo tako, da za vrednostjo imaginarnega dela napišemo črko j (črko i v programiranju raje uporabljamo za indekse). Običajno tudi + med realnim in imaginarnim delom pišemo brez presledka:

>>> 2 + 3j
(2+3j)
>>> (1 + 1j) * (1 - 1j)
(2+0j)
>>> (-1 + 0j) ** 0.5
(6.123233995736766e-17+1j)
>>> import math
>>> math.e ** (math.pi * 1j) + 1
1.2246467991473532e-16j

V zadnjih dveh primerih vidimo, da tudi pri kompleksnih številih prihaja do zaokrožitvenih napak (prva vrednost bi morala biti 1j, druga pa 0+0j), saj Python kompleksna števila predstavi s parom števil s plavajočo vejico. Tako kot pri tipu float tudi pri kompleksnih številih Python vse ostale vrednosti v računu, v katerem se pojavi kakšno kompleksno število, pretvori v tip complex. Tako kot deljenje /, ki dve celi števili pretvori v float, tudi potenciranje na negativnego število samodejno ustvari kompleksna števila:

>>> (-1) ** 0.5
(6.123233995736766e-17+1j)

Kompleksna števila lahko ustvarimo tudi s funkcijo complex, ki ji lahko podamo tudi dva argumenta, da povemo obe komponenti:

>>> complex(3)
(3+0j)
>>> complex(3, 4)
(3+4j)

Tip logičnih vrednosti bool

Logični vrednosti True in False, ki sta tipa bool (boolean oz. Booleovi števili) že poznamo.

Tip ničelne vrednosti NoneType

Tudi vrednost None, ki smo jo srečali takrat, kadar smo v funkciji pozabili napisati return, ima svoj tip, ki mu rečemo NoneType. Zdaj lahko tudi razumemo napako, ki smo jo dobili, ko smo None želeli uporabiti v računu:

def f(x):
    x + 1
>>> 3 * f(2)
Traceback (most recent call last):
  ...
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'

Napaka TypeError nam pravi, da smo nekje zamešali tipe. V tem primeru smo z operacijo * poskušali pomnožiti int in NoneType, torej neko celo število in vrednost None (saj je to edina vrednost tipa NoneType). Rezultat klica f(2) je torej None, zato smo verjetno pozabili na return.