Informatika2-2012/Eloadas08

A MathWikiből
A lap korábbi változatát látod, amilyen Stma (vitalap | szerkesztései) 2012. március 27., 13:27-kor történt szerkesztése után volt.

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 a summa >= 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

Docstring

Ahogy már említettük, a hivatkozás nélküli string elemet szokás használni megjegyzések írására és dokumentálásra. This is a class of example.

TODO: needs implementation.

Első sort nagybetűvel kezdjük és pontal zárjuk. Egy összefoglaló mondat legyen. Majd egy üres sort hagyva részletesen leírhatunk minden funkciót amit az osztály vagy függvény tartalmaz.

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
  • 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

  1. beépített modulok között keres, ha ott nem találja, akkor
  2. sys.path - ban lévő útvonalakat próbálja végig ami a következőképpen épül fel:
    1. az indítás könyvtárába
    2. PYTHONPATH

elérhető elemek

Az elérhető elemeket egy adott modulon belül a dir() függvénnyel listázhatjuk ki

Megjegyzések

Személyes eszközök