Tartalomjegyzék
Python haladó
- Szerző: Sallai András
- Copyright © 2020, Sallai András
- Szerkesztve: 2020-2023
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
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
- .py – Python script
- .pyc – Python bájtkód
- .pyd – Python dinamikus modul
- .pyo – Python optimalizált kód
- .pyr – Python tároló (repository)
- .p4a – Python for Android Script
- .re – Python szabályos kifejezés forráskód
- .pyt – Python adatdeklaráció
Python könyvtárak
- pycache
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}