Hirdetés

Új hozzászólás Aktív témák

  • cousin333
    addikt

    A programozási nyelvek (pl. Python) tanulásának egyik nehézsége, hogy már a legelején kompromisszumokat kell kötni: hiszen "minden mindennel összefügg", nem lineáris a folyamat, így nehéz eldönteni, hogy egy adott ismeret megtanulása túl korai-e. Például a típusoknál van egész meg lebegőpontos szám, sztring meg lista. De igazából mindegyik egy osztály, aminek vannak pl. metódusai, amiket szintén nem árt ismerni. A kérdés, hogy mennyire mélyen kell belemenni ennek a magyarázatába mindjárt a legelején.

    Véleményem szerint a tanulás során az a fontos, hogy meglegyenek a stabil alapok és fogalmak:
    - Python telepítése
    - interaktív mód, "fájl-mód" használata
    - típusok ismerete, néhány metódussal
    - hasznos gyári függvények megismerése (print, type, int, input, range, len, zip)
    - utasításszervezés: ciklusok (while, for) és feltételes elágazások (if, else)

    A fenti ismeretekkel már el lehet boldogulni és hasznos programok készíthetők. Ezek tanulásakor viszont kiemelten fontosnak tartom - különösen a Python esetén -, hogy a helyes használatot sajátítsuk el, mert jobb, ha az elején az ragad meg bennünk. Például korábban linkeltétek ezt a Python programozást tanító oldalt. Már az elejétől egy kicsit ide-oda kapkodónak tűnik, de a fentebb említett okok miatt ez még belefér. Az viszont már nem, hogy pl. a 8. részben - aminek a teljes léte vitatható ebben a formában, mert olyan dolgokat ecsetel, amiket Pythonban nem kell "kézzel" megcsinálni - képes ilyen példaprogramot írni:

    def kereses (L, e):
    for i in range (len(L)):
    if L[i] == e:
    return True
    return False

    Kicsit szégyenlem is, hogy idemásoltam, de mindemellett szeretném hangsúlyozni, hogy a Python nem C! A kód második sora ennek megfelelően egy Python elleni merénylet. A for ciklus ebben a nyelvben az elemeken lépked végig, nem az indexeken. A fenti megoldás rondább - és lassabb! - mint a helyes változat:

    def kereses(L, e):
    for i in L:
    if i == e:
    return True
    return False

    Ami még mindig nem az igazi, hiszen máshogy kell lekódolni azt, hogy egy lista tartalmaz-e egy bizonyos elemet:

    e in L

    Jól látható, hogy a fenti kód "némileg" egyszerűbb, mint az eredeti... Aki tehát az alapokat rendesen szeretné elsajátítani, (ismételten) ajánlom neki Raymond Hettinger (Python core-developer) videóját. Angol, de elég a kódot nézni. Felül a rossz, alul a jó.

    A másik fontos feladatnak a globális szemlélet elsajátítását tartom. Ez kicsit olyan, mintha távolról néznél egy térképet, hogy lásd, hol vagy körülbelül a térképen. Ezek pl: a "tor"-ok: iterator, generátor, dekorátor, vagy például list comprehension.

    Ha már a végén a térképet emlegettem: ez azért fontos, mert a "teljes Pythont" úgysem fogod megtanulni, csak azt a részét, amit használni fogsz. Ezért kell azt is látni, hogy milyen globálisan használható funkciók és trükkök vannak, amiket te is felhasználhatsz a saját kódodhoz, programodhoz.

    Szerencsére a Python egy jól összerakott nyelv és az efféle alapelvek szépen összekapcsolódnak egy egésszé: Pl. vannak az iterálható elemek (iterable) mint pl. a lista, a set vagy a sztring, meg vannak az iterátorokat "fogyasztó" funkciók, mint a for ciklus a zip, a min... stb. Ezért van az, hogy egy listában végigmehetsz az elemeken, vagy kiírathatod a legnagyobb elemet, és ezért van az is, hogy a for ciklus végigmegy a listán (az elemeken) meg használható a sztringre is (ott a karaktereken megy végig).

    Ami még kimaradt az előző felsorolásomból, az az objektum-orientáltság, azon belül is az öröklés (Super considered super!), illetve mondjuk az osztályoknál a "dunder" metódusok: __init__, __add__, __next__ stb. De a @property dekorátor is nagy királyság, egy Java-s ember biztos értékelné őket. Ehhez kapcsolódva még egy zseniális videó az osztályokról: Python's Class Development Toolkit :R. Ez sokat segíthet kezdőknek is, hogy jobban megértsenek olyan fogalmakat, mint a staticmethod.

Új hozzászólás Aktív témák