Informatika2-2015/Eloadas Tartalek Python Referenciak

A MathWikiből
A lap korábbi változatát látod, amilyen Csirke (vitalap | szerkesztései) 2015. február 17., 23:21-kor történt szerkesztése után volt.
(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Tartalomjegyzék

Mutable és Immutable típusok

A pythonban két fajta változó van, mutable (kb. "változtatható"), és immutable (kb. "nem változtatható"). (Inkább az angol neveket használom, mert annak hogy nem változtatható változó nincs értelme, legalábbis nem az, amit igazából jelent az immutable.)

Immutable

Az immutable változó az egyszerűbb eset, ez az olyan változó, amiben bízhatunk, hogy csak akkor változik az értéke, ha mi értéket adunk neki:

link

Itt az látható, hogy ugyan azt mondtuk, hogy "b = a", amikor utána megváltoztatjuk a b értékét, annak nincs hatása az a értékére.

Ilyen fajta, tehát immutable, például a:

  • minden féle szám, tehát egész, valós (float) vagy akár komplex
  • igaz/hamis (boolean) változók
  • karakterláncok
  • tuple

Mutable

Kicsit nehezebb eset a mutable változók. Először nézzünk példa kódot

link

Itt azt láthatjuk, hogy amikor megváltoztatjuk a jojatekok értékét, akkor a jatekok értéke is megváltozik. Ez azért van, mert ugyan jatekok és jojatekok két külön változó, de ugyanarra a listára hivatkoznak. Ezt a python tutor is jelzi a fenti kódábrázolásban, azzal hogy nem a változó neve mellett van a lista tartalma, hanem onnan mutat egy nyíl a listára, és ott látható a tartalom.

Néhány változótípus, ami mutable:

  • Lista
  • Szótár
  • Halmaz
  • Általában minden bonyolultabb dolog.

Problémák

Miért fontos ez számunkra? Profibb felhasználók számára van amikor ezt jól ki tudják használni, hogy hatékony legyen a kódjuk. Azonban a jelenlegi szinten nekünk ez több problémát okoz, mint amiben segít. Ezért most arra koncentrálok, hogy hogyan tudjuk elkerülni hogy módosítsunk valamit amit nem akarunk. Egy példa:

link

Ha csak az utolsó 4 sort olvassuk el, teljesen logikusnak tűnik a dolog, de mégsem működik, mert a függvényen belül megváltoztattuk a listát amit kaptunk. Általános megoldás amit javaslok, függvényen belül soha ne változtassunk meg olyan mutable változókat amiket paraméterként kaptunk. Ha úgy egyszerű a kódunk hogy az eredeti listából/szótárból törlünk vagy módosítunk, akkor először készítsünk egy másolatot. Például az előző kódunk javított változata így nézhet ki:

link

Lista másolásához ez a [:] jelzés általános módszer a másoláshoz, a szótárnak van egy külön copy() metódusa, amit így lehet használni:

szotar = {"cica" : "kitten", "kutya" : "dog"}
szotar_masolat = szotar.copy()

Egyelőre ennyit elég tudni a mutable típusokról, még a félév folyamán később visszatérünk rájuk.

Személyes eszközök