Már megismerkedtünk a karakterláncokkal (sztringekkel) és listákkal, mint összetettebb adatszerkezetekkel. A rendezett sorozat vagy tuple megadása kerek zárójelek közt vesszőkkel elválasztva, vagy a tuple()
függvénnyel adható meg:
t = (1, 5, 6, 2, 1)
print t[2]
type(t)
l = [1, 2, 3]
t = tuple(l)
print t
for e in t:
print e
t[1] = 4
Bizonyos helyzetekben a zárójel el is hagyható:
x = 2, 3, 4
print x
x, y = 2, 3
print x
print y
A tuple-k úgy működnek, mint a listák egy kivétellel. A listák elemei változtathatók (mutable), a tuple elemei nem változtathatók (immutable). Egy tuple elemei csak úgy változtathatók meg, ha újra létrehozzuk, hasonlóan a string-ekhez:
s = "lelet"
print s[2]
s = "lehet"
for e in s:
print e,
s[2] = "l"
A szótárakat képzelhetjük úgy, mint kulcs-érték párok tárolóit. Egy szótár kulcsa bármilyen megváltoztathatatlan adatszerkezet lehet, akár egyszerű, mint egy egész vagy valós szám, akár egy tuple, vagy egy string:
d = {"kutya": 5}
type(d)
Értékként bármilyen adattípus szerepelhet, nem kell megváltoztathatatlannak lennie:
d["macska"] = [1, 5]
Szótárba új elemet úgy vehetünk fel, ha egy új kulcshoz hozzárendelünk egy értéket:
print d
Egy szótáron belül többféle kulcs is lehet:
d[5] = 7
d[(1, 5)] = "macska"
print d
d[(1, 5)] = "sajt"
print d
A szótár kulcsai bejárhatók egy for
ciklussal:
for kulcs in d:
print kulcs, d[kulcs]
A szótárak elemeinek sorrendje véletlenszerűnek tűnhet. A háttérben a szótárak tárolási mechanizmusa áll.
A szótárak úgynevezett hash függvényt alkalmaznak, hogy a kulcsokat leképezzék egy véges halmazra. Ezeket a hash-értékeket használja az elemek gyors eléréséhez. A részletek ismertetése nélkül néhány hash érték, ami lekérhető a hash()
függvénnyel:
print hash((1, 5))
print hash(5), hash(0), hash(False), hash(True)
print hash("kutya")
print hash("kutyb")
print hash("kutya, macska, kutya, macska, akármi, valami")
Bejárható (iterable) az olyan adattípus, mely egyesével vissza tudja adni az összes értékét. Bejárásra a for
ciklus használható.
print "kutya "*3
print (1, 2, 3)*3
print [1, 2, 3]*3
(1, 2) + (2, 4, 6)
all((0, 1, 1, 1))
any((0, 1, 1, 1))
zip((1, 2, 3), (11, 12, 13))
sum((1, 2, 3))
Tekintsük az alábbi kódot, mit ír ki eredményül?
x = 6
def fv1():
x = 0
print x
fv1()
print x
A fv1
-ben használt x
változó nem ugyanaz, mint a kód legelején használt. Amikor egy függvényen belül vagyunk, akkor minden külső változót csak értékként tudunk elérni, de megváltoztatni csak úgy nem tudunk, helyette ilyenkor egy lokális változót hozunk létre ugyanazzal a névvel, mely csak ebben a függvényben él.
x = 6
def fv1():
print x
fv1()
Megmondhatjuk a függvénynek, hogy mi a külső globális változót szeretnénk használni a global
kulcsszóval:
x = 6
def fv1():
global x
x = 0
print x
fv1()
print x
Tehát a változók, melyeket a függvényekben hozunk létre csak lokálisak és kívül, vagy más függvényekben nem fognak látszani:
def fv1():
w = 6
print w
def fv2():
print w
fv1()
fv2()
global
kulcsszó használata szükségtelen (a Pythonban nincs konstans típus, mi gondoskodunk róla, hogy a változó konstans legyen)