Informatika2-2012/Eloadas08
Stma (vitalap | szerkesztései) (→Python szintaktika és az értelmezése) |
Stma (vitalap | szerkesztései) (→Python szintaktika és az értelmezése) |
||
17. sor: | 17. sor: | ||
* változók definiálása és egyben deklarálása az '''=''' operátorral típus definiálása nélkül | * változók definiálása és egyben deklarálása az '''=''' operátorral típus definiálása nélkül | ||
* minden változó egy objektumként jelenik meg a háttérben aminek a típusát a '''type(obj)''' függvénnyel kérhetjük el. | * minden változó egy objektumként jelenik meg a háttérben aminek a típusát a '''type(obj)''' függvénnyel kérhetjük el. | ||
− | * azonos kódblokkokat azonos behúzással jelöljük | + | * azonos kódblokkokat azonos behúzással jelöljük |
* kódblokk kezdetét a ''':''' jelzi | * kódblokk kezdetét a ''':''' jelzi | ||
* megjegyzést a '''#''' karakterrel tudsz beírni, ami azt jelenti, hogy a sorban utána lévő karaktereket már nem veszi figyelembe a fordító (sok helyen láthatsz olyat, hogy hivatkozás nélküli string-kel csinálják) | * megjegyzést a '''#''' karakterrel tudsz beírni, ami azt jelenti, hogy a sorban utána lévő karaktereket már nem veszi figyelembe a fordító (sok helyen láthatsz olyat, hogy hivatkozás nélküli string-kel csinálják) | ||
25. sor: | 25. sor: | ||
* az előbbi struktúrát átültethetjük több változó több változóval való értékadására | * az előbbi struktúrát átültethetjük több változó több változóval való értékadására | ||
* használható a <code>5 <= summa < 10</code> kifejezés is, ami olyan mintha kiírnánk a <code>summa >= 5 and summa < 10</code> | * használható a <code>5 <= summa < 10</code> kifejezés is, ami olyan mintha kiírnánk a <code>summa >= 5 and summa < 10</code> | ||
+ | === Code style [http://www.python.org/dev/peps/pep-0008 PEP 8 alapján]=== | ||
+ | * használj mindig 4 space-t minden egyes szinthez | ||
+ | * a nagyobb kódrészeket tagold üres sorokkal (függvény, osztály, nagyobb kód blokk) | ||
+ | * használj space-t a vesző után és az operátorok mellett | ||
+ | * használj docstring-et és ahol lehet a megjegyzés a saját sorára vonatkozzon | ||
+ | * ahol lehet használj ASCII karakterkódolást | ||
+ | * 80 karakternél ne legyen hosszabb egy sor | ||
+ | * CamelCase elnevezési konvenciót kövesse az osztályok neve és lower_case_with_underscores a függvények nevei | ||
== Vezérlési elemek == | == Vezérlési elemek == |
A lap 2012. március 27., 13:17-kori változata
Tartalomjegyzék |
Python-ról általában
A Python egy olyan általános körben használható magas szintű programozási nyelv, aminek az egyik alap elve az olvasható kód írása egy nagyon tiszta szintaxis használatával. 1991-ben alkotta meg Guido Van Rossum.
További jellemzők
- objektum orientált (imperatív, procedurális), funkcionális
- sok beépített modul a fejlesztés megkönnyítésére
- dinamikus típus kezelés
- automatikus memóriakezelés
- többféle megvalósítás (CPython, Jython, IronPython, PyPy, Python for S60)
- open-source a főbb platformokra
Python kód futtatása
A kód futtatható interpreter konzolon belül és külső fájlban tárolva. A tavalyi előadást mint ismétlés ajánlom átnézni. (Tananyag része!)
Python szintaktika és az értelmezése
- változók definiálása és egyben deklarálása az = operátorral típus definiálása nélkül
- minden változó egy objektumként jelenik meg a háttérben aminek a típusát a type(obj) függvénnyel kérhetjük el.
- azonos kódblokkokat azonos behúzással jelöljük
- kódblokk kezdetét a : jelzi
- megjegyzést a # karakterrel tudsz beírni, ami azt jelenti, hogy a sorban utána lévő karaktereket már nem veszi figyelembe a fordító (sok helyen láthatsz olyat, hogy hivatkozás nélküli string-kel csinálják)
- lista másolása a
MyLista[:]
kifelyezéssel tehetjük meg. Fontos mivel több referencia használatával a lista módosításával esetleg olyan eredményt kaphatunk amire nem számítunk. - egyszerre több elem inicializálása
a=b=c=1
- a sorozat elemei kiszedhetőek
a, b = [4, 5]
. Fontos hogy az összes elemre kell változót írnunk! - az előbbi struktúrát átültethetjük több változó több változóval való értékadására
- használható a
5 <= summa < 10
kifejezés is, ami olyan mintha kiírnánk asumma >= 5 and summa < 10
Code style PEP 8 alapján
- használj mindig 4 space-t minden egyes szinthez
- a nagyobb kódrészeket tagold üres sorokkal (függvény, osztály, nagyobb kód blokk)
- használj space-t a vesző után és az operátorok mellett
- használj docstring-et és ahol lehet a megjegyzés a saját sorára vonatkozzon
- ahol lehet használj ASCII karakterkódolást
- 80 karakternél ne legyen hosszabb egy sor
- CamelCase elnevezési konvenciót kövesse az osztályok neve és lower_case_with_underscores a függvények nevei
Vezérlési elemek
A vezérlési elemeket az előző félévben a SAGE-el kapcsolatban már átnéztük, ezeket kell tudni. Info1 kapcsolódó diái
Összefoglalva:
Elágazás
- if (elif, else)
Ciklusok
- while
- for
- break, continue
Adattípusok
- None - a semmi programbeli megvalósulása
- numerikus
- egész
- lebegőpontos
- (complex)
- long
- boolean
- sorozatok - elemeik egész számmal indexelhetőek
- módosíthatatlanok
- string
- tuple
- módosíthatóak
- lista
- módosíthatatlanok
- halmazok
- halmaz (set)
- térképezés
- szótár (dict)
Fontos tudni, hogy a numerikus és a módosíthatatlan sorozatok úgymond "változtathatatlanok" ami annyit tesz, hogy ha egy elemre több hivatkozásunk van, akkor ha az egyiket megváltoztatom akkor az új értékkel keletkezik egy új elem a memóriában és a hivatkozás már erre fog mutatni. (Ez a felhasználó számára láthatatlan!)
Ezek az alapvetően használt elemek, ezen felül van meg sok egyéb amelyek közül a legfontosabb az osztályok amiket később fogunk venni. Ha többet akartok tudni a python adatmodelljéről akkor itt találtok leírást róla.
Program struktúra
A python lehetőséget ad bonyolult program szétdarabolására hogy az átláthatóbb legyen a fejlesztők számára A csomagok és a modulok kialakításával érhetjük el a darabolást.
csomag
Kiszervezhető és akár önmagukban is futtatható nagyobb független kódrészletekre használatos. Egy adott területhez tartozó feladatokat látja el. Általában több modul és alcsomagokat tartalmaz.
Pl: numpy - "NumPy is the fundamental package for scientific computing with Python."
Mitől lesz valami csomag? Csomaggá az a könyvtár változhat ami tartalmazza a __init__.py fájlt. Ez a fájl jelzi az fordító számára, hogy egy csomagról van szó. A __init__.py üresen is elég, de vannak extra változók amiket lehet használni a csomag könnyebb használata érdekében (__all__, __path__, ...)
modul
Kisebb egybefüggő programrészek egysége. Maga a python programot tartalmazó file egy modult képez.
A modul neve a file nevével egyezik amiben van a kód. Így pl.: a protak.py programfájlban lévő modulra a protak névvel tudunk hivatkozni. A modul nevét a programon belül a __name__ változóval érjük el. Fontos, hogy ha a modult mint program indítjuk akkor a __name__ értéke __main__ lesz! Ezt fel lehet használni pl.:
tortin.py fájl tartalma:
def mainp(): print "This is the main" def elp(): print 'This is not the main' if __name__ == '__main__': mainp() else: elp()
Majd hivjuk meg konzolbol a
python tortin.py
illetve interpreterből...
import tortin
(A modul elnevezést szokás használni még azokra a csomagokra is amiket különálló általános problémákat lehet kezelni pl. numpy és azokra amik kiterjesztési csomagok azaz más nyelvhez (pl.: C) való kapcsolódást valósít meg.)
csomagok és modulok felhasználása (import)
A programrészeket felhasználhatjuk a programon belül akárhol, ha azt jelezzük a fordítónak.
A python-on belül ezt az import vagy a from és az import kulcsszavakkal tehetjük meg a következő módon.
import sys from sys import stdin from sys import maxint as mi from mymodule import *
- az import sys paranccsal az összes sys modul alatt elérhető függvényhez és változóhoz hozzáférünk. pl.: sys.maxint vagy sys.ps1
- az from sys import stdin paranccsal a programon használhatjuk a sys modulban definiált stdin változót a saját nevén, azaz a fájlon belül elérhető a stdin változó.
- a from sys import maxint as mi nagyon hasonló az előzőhöz csak itt meg megadtuk azt is hogy a mi modulunkban mi a maxint változót a mi néven akarjuk elérni.
- végül a from mymodule import * sorral azt adtuk meg, hogy mymodule minden eleme (kivéve a "_" karakterrel kezdődőek) elérhetőek legyenek. A * használata csomag import esetén kerülendő, modul esetén is megfelelő figyelemmel!
relatív import útvonalak
Bonyolultabb csomagokban ahol több alcsomag és sok-sok modul található az egymáshoz való hivatkozásokhoz használhatunk relatív útvonalakat.
from . import torti from .. import kerek from ..vaz import orr
modul és csomag nevek feloldása
Az fordító először a
- beépített modulok között keres, ha ott nem találja, akkor
- sys.path - ban lévő útvonalakat próbálja végig ami a következőképpen épül fel:
- az indítás könyvtárába
- PYTHONPATH
elérhető elemek
Az elérhető elemeket egy adott modulon belül a dir() függvénnyel listázhatjuk ki