Tartalomjegyzék

< Python

Python haladó

A None

A None nem létező érték, mint más nyelvekben a NULL.

Írassuk ki típusát:

print(type(None))

Halmazok

A halmaz, angolul set egy olyan kollekció amely nincs számozva, nincs indexelve. A halmazban egy elem csak egyszer szerepelhet. A Python nyelvben a halmazokat kapcsos-zárójelek között adjuk meg.

egyHalmaz = {'alma', 'barack', 'szilva'}
print(egyHalmaz)

A halmaz bejárása:

egyHalmaz = {'alma', 'barack', 'szilva'}
 
for elem in egyHalmaz:
    print(elem)

Hozzáadás a halmazhoz:

egyHalmaz = {'alma', 'barack', 'szilva'}
 
egyHalmaz.add('körte')
 
print(egyHalmaz)

Ha a halmaz már tartalmazza az elemet, nem történik semmi.

Halmaz mérete:

egyHalmaz = {'alma', 'barack', 'szilva'}
print(len(egyHalmaz))

Törlés a halmazból:

egyHalmaz = {'alma', 'barack', 'szilva', 'körte'}
egyHalmaz.remove('barack')
print(egyHalmaz)

Törlés másként:

egyHalmaz = {'alma', 'barack', 'szilva', 'körte'}
egyHalmaz.discard('barack')
print(egyHalmaz)

A pop() függvény is használható, de mivel nem rendezett a halmaz, nem lehet tudni, melyik elem kerül eltávolításra.

Halmaz ürítése:

egyHalmaz = {'alma', 'barack', 'szilva', 'körte'}
egyHalmaz.clear()
print(egyHalmaz)

A halmaz törlése:

egyHalmaz = {'alma', 'barack', 'szilva', 'körte'}
del egyHalmaz
print(egyHalmaz)

A print() függvény hibát ad, mivel a halmaz már nem létezik.

Halmazok uniója:

egyHalmaz = {'alma', 'barack', 'szilva', 'körte'}
kettoHalmaz = {'banán', 'citrom'}
haromHalmaz = egyHalmaz.union(kettoHalmaz)
 
print(haromHalmaz)

Új halmaz keletkezik.

Egy halmazt bővítünk egy másikkal:

egyHalmaz = {'alma', 'barack', 'szilva', 'körte'}
kettoHalmaz = {'banán', 'citrom'}
egyHalmaz.update(kettoHalmaz)
 
print(egyHalmaz)

Itt nem keletkezik új halmaz, egyHalmaz kerül bővítésre.

Halmaz létrehozása konstruktorral:

egyHalmaz = set(('alma', 'barack', 'szilva', 'körte'))
print(egyHalmaz)
add() Elem hozzáadása
clear() Összes elem törlése
copy() Másolat
difference() Visszatér kettő vagy több halmaz különbségével.
Új halmaz jön létre
difference_update() Eltávolítja azokat az elemeket, amelyek szerepelnek a másik halmazban.
discard() Adott elem törlése.
intersection() Két halmaz metszete.
intersection_update Azon elemek törlése, amely szerepel a másik halmazban.
isdisjoint() Van-e metszéspontja a két halmaznak.
issubset() A másik halmazt tartalmazza-e.
pop() Elem eltávolítása
remove() Adott elem eltávolítása
symmetric_difference() Olyan halmaz létrehozása,
amely a nem közös részeket tartalmazza.
symmetric_difference_update() Adott halmazban csak a nem közös elemek maradnak.
Nem jön létre új halmaz.
union() Két halmaz uniója. Új halmaz jön létre
update() Halmazok uniója, de nem jön létre új halmaz

Szótár

A szótár, angolul dictionary, egy kollekció, amely számozatlan, változtatható és indexelt. A Python nyelvben kulcs érték párokkal határozzuk meg a szótárakat.

Létrehozás:

egySzotar = {
    'nev': 'Nagy János',
    'telepules': 'Szolnok',
    'fizetes': 2850000
}
 
print(egySzotar)

Hivatkozás egy elemre:

egySzotar = {
    'nev': 'Nagy János',
    'telepules': 'Szolnok',
    'fizetes': 2850000
}
 
print(egySzotar['nev'])

Vagy:

print(egySzotar.get('nev'))

Érték cseréje:

egySzotar['nev'] = 'Kiss Mihály'

Szótár bejárása:

egySzotar = {
    'nev': 'Nagy János',
    'telepules': 'Szolnok',
    'fizetes': 2850000
}
 
 
for elem in egySzotar:
    print(elem)

Vagy:

for kulcs in egySzotar:
    print(egySzotar[kulcs])

Vagy:

for elem in egySzotar.values():
    print(elem)

Kulcsok és értékpárok kiíratása:

for kulcs, elem in egySzotar.items():
    print(kulcs, elem)

Van-e ilyen kulcs:

if 'fizetes' in egySzotar:
    print('Van fizetes kulcs')

Szótár mérete:

print(len(egySzotar))

Plusz elem hozzáadása:

egySzotar = {
    'nev': 'Nagy János',
    'telepules': 'Szolnok',
    'fizetes': 2850000
}
 
egySzotar['kor'] = 38
 
print(len(egySzotar))

Elem törlése:

egySzotar.pop('kor')

Utoljára beszúrt elem törlése:

egySzotar.popitem()

Elem törlése:

del egySzotar['kor']

A szótár törlése:

del egySzotar

Az elemek törlése:

egySzotar.clear()

A szótár másolása:

kettoSzotar = egySzotar.copy()

Másolás másként:

kettoSzotar = dict(egySzotar)

Beágyazott szótár:

dolgozok = {
    'janos' : {
        'nev': 'Nagy János',
        'telepules': 'Szolnok',
        'fizetes': 2850000,
    },
    'mari' : {
        'nev': 'Pere Mária',
        'telepules': 'Miskolc',
        'fizetes': 2810000
    },
    'kati' : {
        'nev': 'Lamp Katalin',
        'telepules': 'Szeged',
        'fizetes': 2500000
    }
}
 
print(dolgozok)

Külön szótárak:

janos = {
    'nev': 'Nagy János',
    'telepules': 'Szolnok',
    'fizetes': 2850000,
}
 
mari = {
    'nev': 'Pere Mária',
    'telepules': 'Miskolc',
    'fizetes': 2810000
}
 
kati = {
    'nev': 'Lamp Katalin',
    'telepules': 'Szeged',
    'fizetes': 2500000
}
 
dolgozok = {
    'janos' : janos,
    'mari' : mari,
    'kati' : kati
}
 
print(dolgozok)

Konstruktor használata

dolgozo = dict(
    nev= 'Nagy János',
    telepules= 'Szolnok',
    fizetes= 2850000,
)
print(dolgozo)
clear() Az összes elem törlése
copy() Szótár másolása
fromkeys() Egy szótárat kapunk adott kulccsal és értékkel
get() Visszatérés adott kulcs értékével
items() Egy tuple-t kapunk, amely tartalmazza
az összes kulcs értékpárokat.
keys() A kulcsok listáját kapjuk
pop() Adott elem törlése, kulcs alapján
popitem() Utoljára beszúrt elem törlése
setdefault() Adott értéket kapjuk kulcs alapján.
Ha a megadott kulcs nem létezik
létrejön.
update() Adott kulcsa értékpár frissítése
values() Az értékek listáját kapjuk

Változó hosszúságú argumentum

A függvények használhatnak változó hosszúságú argumentumokat.

valto.p
def osszead(*args):
    osszeg = 0
    for szam in args:
        osszeg = osszeg + szam
    return osszeg
 
print(osszead(3, 4))
print(osszead(3, 4, 5))

A másik megoldás, ha listaként adom át a paramétereket:

valtolista.py
def osszead(args):
    osszeg = 0
    for szam in args:
        osszeg = osszeg + szam
    return osszeg
 
print(osszead([3, 4]))
print(osszead([3, 4, 5]))

Kulcs alapú argumentumok

Változó hosszúságú kulcs alapú argumentumokat a kettő darab * operátorral hozunk létre. Például **kwargs.

kulcs.py
def szamitTerulet(**kwargs):
    alap = kwargs.get('alap')
    magassag = kwargs.get('magassag')
    return alap * magassag / 2
 
 
print(szamitTerulet(alap=30, magassag=35))

Vegyes argumentumok

Az argumentumok lehetnek vegyesen kulcs nélküli és kulcs alapú argumentumok.

vegyes.py
def doit(*args, **kwargs):
    if kwargs.get('operator') == '+':
        return args[0] + args[1]
    if kwargs.get('operator') == '-':
        return args[0] - args[1]
 
print(doit(3, 4, operator='-'))

Lambda

Kis névtelen függvény, amely csak egyetlen kifejezést tartalmazhat.

lambda argumentumok : kifejezés
dupla = lambda szam : szam * 2
 
print(dupla(5))
haromszogTerulet = lambda alap, magassag : (alap*magassag)/2
 
print(haromszogTerulet(30, 35))
haromszogKerulet = lambda a, b, c : a + b + c
 
print(haromszogKerulet(30, 35, 40))

Lehetséges használat:

def sokszorozo(n):
    return lambda a : a * n
 
duplazo = sokszorozo(2)
triplazo = sokszorozo(3)
 
print(duplazo(5))
print(triplazo(5))

Üresek

def fuggveny():
    pass

Üres végtelen ciklus:

while(True):
    pass

Üres if ág:

igaz = True
if igaz :
    pass
else :
    print('Hamis')

Üres osztály

empty.py
class Dolgozo:
    pass

Munka üres osztállyal:

empty.py
class Dolgozo:
    pass
 
janos = Dolgozo()
janos.name = 'Valaki'
janos.tisztseg = 'kocka'
janos.telefon = 12345678
 
print(janos.name)
print(janos.tisztseg)
print(janos.telefon)

Az üres osztály használható osztály. Bármilyen adattagot beállíthatunk, és amit beállítottunk lekérdezhetjük.

Üres érték

valami = None

Python fájlok

WHL fájlok

A WHL a Python Wheel Package szavakból származik. A Wheel a Python saját csomagformátuma. A Wheel valójában egy ZIP formátumú archív fájl, amelyet whl kiterjesztéssel rendelkezik.

Python fájlok

Python könyvtárak

A Python futtatáskor elsőként bájtkódot fordít. A bájtkód ebben a könyvtárban jön létre. A forráskódban importálás mellett szokott megjelenni. A könyvtárban .pyc vagy .pyo kiterjesztésű fájlokat talál, amelyek a lefordított, optimalizált bájtkódok.

Ha másnak küldjük el a Python kódot, ezt a könyvtárat töröljük. Git esetén a .gitignore fájlban szokás szerepeltetni.

Változó behelyettesítés

a = 35
b = 'valami %d' % a
print(b)
a = 35
b = 'valami {0}'.format(a)
print(b)
a = 35
 
b = """
valami %s
""" % a
print(b)

Operációs rendszer parancsok

import os
os.system('ls')

A program végrehajtja az operációs rendszer ls parancsát.

Külső könyvtárak használata

sys.path.append('/ahol/a/libek/vannak/')

Egy fájlban több osztály

Azok az osztályok, amikre hivatkozunk egy állományon belül előrébb kell legyenek, mint a hivatkozott hely.

class View:
    pass
 
class Model:
    pass
 
class Controller:
    view = View()
    model = Model()

f-String

Az f-Stringet a Python 3.6-ban vezették be.

Változó behelyettesítés

Lehetővé teszi változók behelyettesítését.

fstring.p
name = 'Nagy János'
city = 'Szolnok'
print(f'Név: {name} Város: {city} ')

Mindegy, hogy aposztrófokat vagy idézőjeleket használunk:

fstring2.p
name = 'Nagy János'
city = 'Szolnok'
print(f"Név: {name} Város: {city} ")

Kifejezés

A f-sztring alkalmas kifejezések kiértékelésére is.

fstring_kif.p
oldal = 30
 
print(f'Kerület: {oldal*3}')

Szótár

Hivatkozhatunk szótárak tagjaira:

fstring_dict.py
employee = {'name': 'Nagy János', 'city': 'Szolnok'}
 
print(f"{employee['name']}:{employee['city']}")

Többsoros

fstring_muliline.py
name = 'Nagy János'
city = 'Szolnok'
salary = 3845000
 
datas = (
    f'Név: {name}\n'
    f'Város: {city}\n'
    f'Fizetés: {salary}\n'
)
 
print(datas)

Formázás

fstring_format.py
num = 3.834384
print(f'{num:.2f}')

Szélesség is:

fstring_format.py
num = 3.834384
print(f'{num:20.2f}')

Igazítás jobbra:

fstring_format.py
num1=1
num2=12
num3=123
 
print(f'{num1:>5d}')
print(f'{num2:>5d}')
print(f'{num3:>5d}')

Számrendszerek és tárolási osztályok:

num=12
 
print(f'{num:d}') # decimális egész
print(f'{num:x}') # hexadecimális
print(f'{num:o}') # oktális
print(f'{num:f}') # fixpontos alak
print(f'{num:e}') # tudományos alak
print(f'{num:b}') # bináris

Dátum

import datetime
 
today = datetime.datetime.today()
print(f'{today: %Y}')

Kurzor mozgatása

def gotoxy(x,y):
    print ("%c[%d;%df" % (0x1B, y, x), end='')

Útvonal lekérdezése

Honnan fut a Python script?

real_path = os.path.realpath(__file__)
base_path = os.path.dirname(real_path)
real_path = os.path.realpath(__file__)
base_path = os.path.split(real_path)[0]

A real_path-ban megkapom a teljes útvonalat és a fájlnevét is. A bas_path-ban csak az útvonalat kapom, fájlnév nélkül.

A fájl neve:

real_path = os.path.realpath(__file__)
base_name = os.path.basename(real_path)

Locale

Ha egy állományból olyan számokat olvasunk amelyekben tizedesvesszők vannak, át kell azokat konvertálni, ha számolni szeretnénk vele.

Át is alakíthatjuk:

num = float(num_str.replace(',', '.'))

Vagy locale-t használunk:

main.py
from locale import atof, setlocale, LC_NUMERIC
 
setlocale(LC_NUMERIC, 'hu_HU.UTF-8')
num_str = '35,47'
 
print(atof(num_str) * 2)

Beírható locale értékek lekérdezése:

>>> import locale
>>> locale.locale_alias

Típusok

def double_num(num1: float, num2: float):
    return num1 + num2
 
print(double_num(6.2, 5.4))
def double_num(num1: int, num2: int):
    return num1 + num2
 
print(double_num(6, 5))
a: List[str] = ['alma', 'körte', 'barack']
b: Tuple[int, int, int] = [35, 40, 45]
c: Dict[str, int] = {'első': 35, 'második': 40}