Ugrás a fő tartalomra

Python nyelv alapjai 1



Szintaktikai szabályok:
  • Parancs vége az új sor ( ezt LF, CRLF és CR is jelezheti, ez gond jelenthet a windows-linux kódhordozásnál)
  • Strukturált program tömbök a fej utálni kettőspontot követő új sor behúzással szintezzük, amelynél az összetartozás szintje a behúzás mértékétől függ (behúzás történhet space vagy TAB karakterekkel, de mindig csak egyik)
  •  Egy utasítás több sorban is lehet, ezt jelezheti egy nyitva maradt kerek, szögletes vagy kapcsos zárójel vagy egy jel a félbehagyott sor végén.
  • Nagy és kisbetű különbözőnek számít az értelmezőjének.
  • Értékadás egyenlőség jellel (ekkor jön létre a kapcsolat a változónév és értéke között, ekkor automatikus, dinamikus típus átadás is történik)
  • Művelet végrehajtási (értelmezési) sorrend:
    • Zárójelek
    • Hatványozás
    • Szorzás, osztás
    • Összeadás, kivonás
    • Azonos prioritású operátorok végrehajtása balról jobbra történik.
  • Két érték felcserélése egy lépésben lehetséges
>>> a, b = b, a
Pytfon program működhet a parancsok konzolablakos (pl. IDLE = Integrated Development Environment) egyenkénti megadásával, vagy a program sorok állományba mentésével (ennek kiterjesztése .py) és az állomány futtatásával
 python.exe allomany.py
Karakter készlet beállítása volt a legelső programsorok egyike a 2. verziónál a magyar ékezetes betűhasználat céljára (pszeudo-commentek):
# -*-coding:ISO-8859-2-*-
# -*- coding:Utf-8 -*-
A 3. verziótól már az utf-8 az alapértelmezett betűkészlet amely egyből tartalmazza a magyar ékezetes betűket is.


FIGYELEM : A végű sorokban nem lehet komment (megjegyzés).  (Komment/megjegyzés jele a # karakter amely után álló tartalmat a sorvégéig az értelmező figyelmen kívül hagyja.)

Elsődleges prompt (rendszer készenlétet lejez command ablakban):
>>>
Másodlagos prompt (ezt behúzással jelzi a rendszer, hogy további adat/paraméter bevitelre vár. pl szekvenciák) ezt program sor behúzással jelezzük py állományban. Ebből az üzemmódból üres sor bevitellel léphetünk ki.
...
Kommentezés, program megjegyzések hozzáfűzési lehetőségei:
#  Program fájlban megjegyzések jelölése

Érték adás:
A változóhoz való érték hozzárendelés vagy értékadás: Egy olyan műveletet, amely kapcsolatot teremt a változónév és a változó értéke (tartalma) között. Jele : =
szov = '''a0
  aa '''     # Többsoros szöveges változó jelőlése (3 db ')

pi=3.14159
a1, b2, c3 = 10, 15, 20

Többszörös értékadás:
x = y = 77
a, b = 42

Műveletek:
2+3
3-2
2*3
10/2
2**2
10 % 3   # modulo :  egész osztásából származó maradék
>>> 15/4
3.75
>>> 15//4
3
>>> 15%4
3
>>> 13%4
1
>>> 13//4
3
>>> "hello lajos"
'hello lajos'
>>> 'hello MIE'
'hello MIE'
>>> "hello"
'hello'
>>> 'hello'
'hello'
>>> 3* 'Lajos' + 'OK'
'LajosLajosLajosOK'
>>>

 Relációs műveletek:
x == z       # x egyenlő z -vel
x != z       # x nem egyenlő z -vel
x < z        # x kisebb, mint y
x > z        # x nagyobb, mint z
x <= y       # x kisebb, vagy egyenlő mint z
x >= y       # x nagyobb, vagy egyenlő mint z

Sztringek (szöveges változók) kezelése
  • összefüzés           : szoveg1 + szoveg2
  • tartalmazza-e     : szoveg1 in szoveg2
  • karakter elérése : szoveg[1]
  • hossza                  : len(szoveg)
  • konvertálás
    • egésszé : int(szoveg)
    • Valóssá : float(szoveg)
  • kis betűsítés               : lower(szoveg)
  • nagy betűsítés             : upper(szoveg)
  • pozícióját adja vissza : szoveg.find(‘mie’)
  • előfordulásainak száma : szoveg.count(‘mie’)
  • vágás, hasítás             : szoveg.split(‘|’)
  • összefűzés : ‘-‘.join(szoveg_tomb)

Modulok használata elérhetővé teszi a beépített függvényeken kívül
továbbiak használatát.
Egyszerű modul importálás:
>>> import math # matematikai modul fügvényeinek elérhetővé tétele
A már beimportált modul függvényének használati szintaktikája:
<modul>.<függvény>
>>> math.cos(1)

Egyetlen függvény importálása nevesített importja és használata
>>> from math import cos
>>> cos(1)
Modul specialitások:
>>> math.cos.__doc__ # Függvény ismertetése:
>>> dir(math)        # Függvények kilistázása

 Felhasználói adat bemenetek 
input()         #  Mindig a típusa a beírt érték típusának felel 
raw_input()     #   Mindig karakterláncot ad vissza.

Speciális ciklus képzés (for +range)
range([kezdet,] vég [, lépés])  #  egészek listáját adja vissza, mely jól használható a for ciklusban
>>> for i in range(4, 20, 2)
..
>>> for i in range(100, -100, -3)
..

Saját függvények készítése és használata:
def sajat_fuggveny(param1):
   db = 0
   while (param1 > 0):
     db = db + 1
     param1= param1 - 1000
     return ezer_db
..
e_sz = sajat_fuggveny (100000)  # használat

Python azonosítok és objektumok névképzési szabályai:
  • betűvel vagy aláhúzásjellel kezdődnek
  • ugyanezekkel és számjegyekkel folytatódhat
  • az egy és két aláhúzásjellel kezdődő azonosítóknak különleges szerepük is van

Fenntartott szavak:
False class finally is return
None continue for lambda try
True def from nonlocal while
and del global not with
as elif if or yield
assert else import pass
break except in raise
Közvetlen program indításkor végrehajtandó művelet jelölése py állományban: (pl. cmd ablakban :  python  mie_prg.py),
if __name__ == "__main__":
  app.run(port=1962, debug=True)
__name__ => az aktuális modul nevét tartalmazza (Python fájl neve kiterjesztés nélkül)
__main__ => adott py fájl a program belépési pontja
Ezzel a szerkezettel megoldható, hogy a py fájl közvetlenül indítva elinduljon, 
más modulból importálva viszont ne kezdjen dolgozni.

Építkezés alapja a komponens importálás és belső név adás a használathoz (az állomány kezdő részében szerepel)
from flask import Flask, jsonify
mie_app = Flask(__name__)


Python program minták
— Változó beállítása és érték kiírása
 >>> name1 = "Kecskeméti Lajos"
 >>> print(name1)
 Kecskeméti Lajos
 >>> name1
 'Kecskeméti Lajos'
— Tömb(list) változó beállítása és érték kiírása (tömb határoló a vessző)
 >>> tomb = [1, 3, 5, 7, 9]
 >>> tomb[1]
 3
>>> szinek = ['piros' 'Kék', 'Zöld']
 >>> szinek [1]
 'Zöld'
>>> szinek [-1]
 'Zöld'
>>> szinek [0]
 'pirosKék'
>>> szinek [:2]
 ['pirosKék', 'Zöld']
 >>> import os
 >>> utvonal = os.getcwd()
 >>> utvonal
 'C:\Python34_32bit'

Escape kódok jelentése:
\ vissza törtvonal jel ()
' idézőjel (')
" kettős idézőjel (")
b Visszatörlés (BS)
f új form (FF)
n új sor (LF)
r kocsi vissza (CR)
t Horizontális Tab (TAB)
v Vertikális Tab (VT)

nevem = Kecskeméti Lajos'
nevem[4] # => 'k'
nevem.split(' ') # => ['Kecskeméti', 'Lajos'] # tömbbe hasít
v.split('t') # => ['Kecskemé', 'iLajos']
words = nevem.split(' ') # => ['Kecskeméti', 'Lajos']
' '.join(words) # => 'Kecskeméti Lajos' # tömböt összefüz

Feltételes elágazás:
A Pythonban minden összetett utasításnak mindig ugyanaz a szerkezete : egy fejsor, ami kettőspontra végződik, ez alatt következik egy vagy több utasítás, ami a fejsor alatt be van húzva. Ezek a behúzott utasítások alkotják az utasításblokkot.
Az utasításblokk : egy logikai együttest képező utasítások sorozata, ami csak a fejsorban megadott feltételek teljesülése esetén hajtódik végre.
if test:
 # ha igaz végrehajtja amig be van húzva a programsor
elif test 2:
 # ha igaz végrehajtja amig be van húzva a programsor
else:
 # ha hamis akkor végrehajtja amíg be van húzva a programsor
Ciklusok 1
a = 0
while (a < 5):   # amíg 5-nél kisebb addig a behúzottat végrehajtja
 a = a + 1
 print a
Ciklusok 2
for x in kif_tomb:
 # amíg összest be nem járta addig a behúzott programsorokat végrehajtja
for x in range(10):
 # amíg 0-9 között be nem járta addig a behúzott programsorokat végrehajtja
for x in range(5,10):
 # amíg 5-9 között be nem járta addig a behúzott programsorokat végrehajtja

Függvény használat:

a_global = 10
def MieFn(a1):
a_local = 5
 print(a1)
 print(a_global + a_local)
MieFn("Hello, Mi érdekel?")

Minta megadott szövegben a betűk megszámlálása és találat szám visszaadása:
def a_betukSzama(szoveg):
 db = 0
 for i in range(len(szoveg)):
 if (szoveg[i] == 'a') or (szoveg[i] == 'A'):
 db = db + 1
 return db

szoveg_be = raw_input("Vizsgálandó szöveg? ")
print ("Az a betük száma: ",a_betukSzama(szoveg_be))



Figyelem, ezekre vigyázzunk: 
  • A feltételben kiértékelt változónak a kiértékelést megelőzően is léteznie kell.
  • Ha a feltétel eredetileg hamis, akkor a ciklustest soha sem fog végrehajtódni.
  • Ha a feltétel mindig igaz marad, akkor a ciklustest végrehajtása vég nélkül ismétlődik.

Metódusok: ( Egy metódust úgy alkalmazunk egy objektumra, hogy egy ponttal kapcsoljuk őket össze.)
nap =  [1, 2, 3, 4]
nap.append(5)  # hozzáfűzés metodus
print nap      # =>  [1, 2, 3, 4, 5]

Modulok használatával lehetővé válik a beépített függvényeken kívül
továbbiak használata (import szóval betöltjük részben vagy teljesen)
FIGYELEM: Mindig a program elején importálunk
from math import cos
 import math

— DB kezelés
 >>> conn = cx_Oracle.connect('nev', 'jelszo', 'DW')
 >>> cur = conn.cursor()
 >>> cur.execute('SELECT id, name FROM table WHERE id = :id', id=21)
 <cx_Oracle.Cursor on <cx_Oracle.Connection to nev@DW>>
 >>> results = cur.fetchall()
 >>> results
 [(21, 'Kihang')]
 >>> cur.close()
————— py filek
— ora_sel_minta.py =>
 conn = cx_Oracle.connect('nev', 'jelszo', 'DW')
 cur = conn.cursor()
 cur.execute('SELECT id, name FROM tabla WHERE id = :id', id=21546163)
 results = cur.fetchall()
 print(results)
 cur.close()
— ora_ins_minta1.py =>
conn = cx_Oracle.connect('nev', 'jelszo', 'DW')
cur = conn.cursor()
 with conn:
  cur.execute('INSERT INTO tabla (mezo1, id) VALUES ("Szoveg", 2)' )
cur.close()
— ora_ins_minta2.py =>
 conn = cx_Oracle.connect('nev', 'jelszo', 'DW')
 try:
   conn.begin()
   cur.execute('INSERT INTO tabla (mezo1, id) VALUES ("Szoveg", 2)')
   conn.commit()
 except:
   conn.rollback()
   raise
 cur.close()

— ora_ins_minta3.py =>
conn = cx_Oracle.connect('nev', 'jelszo', 'DW')
idVar = cursor.var(cx_Oracle.NUMBER) cursor.execute("""INSERT INTO tabla (oszlop) VALUES (:ertek) RETURNING azon INTO :az""", ertek=42, az=idVar) azon = idVar.getvalue()


Megjegyzések