A Python alapjainak áttekintése 2016. február 29.
Vázlat 1 A Python adatszerkezetei A Python vezérlési szerkezetei 2 Modulok kezelése Példák modulokra
Vázlat 1 A Python adatszerkezetei A Python vezérlési szerkezetei 2 Modulok kezelése Példák modulokra
Mi a Python? Általános célú programnyelv
Mi a Python? Általános célú programnyelv rengeteg beépített és egyéb modullal.
Mi a Python? Általános célú programnyelv rengeteg beépített és egyéb modullal. Dinamikusan típusos (egyszer egész másszor lista)
Mi a Python? Általános célú programnyelv rengeteg beépített és egyéb modullal. Dinamikusan típusos (egyszer egész másszor lista) Objektumorientált (adattípusoknak saját függvényei lehetnek)
Mi a Python? Általános célú programnyelv rengeteg beépített és egyéb modullal. Dinamikusan típusos (egyszer egész másszor lista) Objektumorientált (adattípusoknak saját függvényei lehetnek) Platformfüggetlen bytekódot készít
Mi a Python? Általános célú programnyelv rengeteg beépített és egyéb modullal. Dinamikusan típusos (egyszer egész másszor lista) Objektumorientált (adattípusoknak saját függvényei lehetnek) Platformfüggetlen bytekódot készít Könnyen beágyazhatóak C és Fortran programok (Pylab)
Példaprogram feladatkit zés Készítsünk egy függvényt, amely a egyenlet gyökeit adja vissza. A gyökök: ax 2 + bx + c = 0 x 1,2 = b ± b 2 4ac 2a
Példaprogram megvalósítás from math import sqrt def masodfoku(a, b, c): D = b**2-4*a*c if D < 0: print("nincs valós gyök.") return elif D == 0: print("kett s (valós) gyök van.") else: print("két eltér valós gyök van.") x1 = (-b + sqrt(d)) / 2*a x2 = (-b - sqrt(d)) / 2*a return x1, x2
A szerz Guido von Rossum, holland
A szerz Guido von Rossum, holland Jelenleg a Google alkalmazottja
Miért Python? Na vajon miért?
Miért Python? Na vajon miért? A szerz kedvence a Monty Python's Flying Circus
Miért Python? Na vajon miért? A szerz kedvence a Monty Python's Flying Circus A dokumentációban ajánlott a Monty Python idézet
Vázlat 1 A Python adatszerkezetei A Python vezérlési szerkezetei 2 Modulok kezelése Példák modulokra
Számok egész (int) 1, 2123123123123123118978970
Számok egész (int) 1, 2123123123123123118978970 lebeg pontos (oat) 3.14, 1.6e-19 (math modul)
Számok egész (int) 1, 2123123123123123118978970 lebeg pontos (oat) 3.14, 1.6e-19 (math modul) komplex (complex) 1+3j, 2j (cmath modul)
Számok egész (int) 1, 2123123123123123118978970 lebeg pontos (oat) 3.14, 1.6e-19 (math modul) komplex (complex) 1+3j, 2j (cmath modul) M veletek +, -, *, /, ** (hatvány)
Számok egész (int) 1, 2123123123123123118978970 lebeg pontos (oat) 3.14, 1.6e-19 (math modul) komplex (complex) 1+3j, 2j (cmath modul) M veletek +, -, *, /, ** (hatvány) M veletek egészeknél % (mod), //, bitenkénti m veletek
Karakterláncok (str, sztring) 'Szelet', 'alma\nkörte', "that's it"
Karakterláncok (str, sztring) 'Szelet', 'alma\nkörte', "that's it" Többsoros karakterlánc '''A többsoros szövegeket három idéz jel (" vagy ') határolja.'''
Karakterláncok (str, sztring) 'Szelet', 'alma\nkörte', "that's it" Többsoros karakterlánc '''A többsoros szövegeket három idéz jel (" vagy ') határolja.''' Metódusok: split, splitlines, upper, center, rjusti, format...
Karakterláncok (str, sztring) 'Szelet', 'alma\nkörte', "that's it" Többsoros karakterlánc '''A többsoros szövegeket három idéz jel (" vagy ') határolja.''' Metódusok: split, splitlines, upper, center, rjusti, format... M veletek: +
Karakterláncok (str, sztring) 'Szelet', 'alma\nkörte', "that's it" Többsoros karakterlánc '''A többsoros szövegeket három idéz jel (" vagy ') határolja.''' Metódusok: split, splitlines, upper, center, rjusti, format... M veletek: + 'AREK '*3 # AREK AREK AREK
Karakterláncok format metódusa (haladó) '{0}+{1}+{0}'.format(5, 125) # 5+125+5 '{}-{}'.format(20, 125457) # 20-125457 '{darab} db {aru}: {ar} Ft'.format( aru='kapa', darab=7, ar=1200) # 7 db kapa: 1200 Ft
Listák (list) Bármilyen típusú lehetnek l = [1, 'alma', 2+3j, [5, 4]]
Listák (list) Bármilyen típusú lehetnek l = [1, 'alma', 2+3j, [5, 4]] Módosíthatjuk: hozzáf zhetünk, beszúrhatunk és törölhetünk bel le elemeket
Listák (list) Bármilyen típusú lehetnek l = [1, 'alma', 2+3j, [5, 4]] Módosíthatjuk: hozzáf zhetünk, beszúrhatunk és törölhetünk bel le elemeket Metódusai: append, insert, count, pop...
Listák (list) Bármilyen típusú lehetnek l = [1, 'alma', 2+3j, [5, 4]] Módosíthatjuk: hozzáf zhetünk, beszúrhatunk és törölhetünk bel le elemeket Metódusai: append, insert, count, pop... Példák: lista = ['alma', 'egres', 'alma', 'barack'] lista.append('dió') lista.count('alma') # 2
Rendezett sorozatok (tuple) Listához hasonló, de nem módosítható
Rendezett sorozatok (tuple) Listához hasonló, de nem módosítható t = (1, 'AREK', [1,2])
Rendezett sorozatok (tuple) Listához hasonló, de nem módosítható t = (1, 'AREK', [1,2]) Példák értékadásra: (a, b, c) = (1, 2, 3) print(a) # 1 a, b, c = 1, 2, 3 # Ugyanaz a,b,c = 'Ede' print(a) # 'E' a, b = a+b, a # Nem kell segédváltozó.
Sorozattípusok közös jellemz i Sorozattípusok: karakterlánc, lista, tuple...
Sorozattípusok közös jellemz i Sorozattípusok: karakterlánc, lista, tuple... Ezeknél m ködik az indexelés és szeletelés.
Sorozattípusok közös jellemz i Sorozattípusok: karakterlánc, lista, tuple... Ezeknél m ködik az indexelés és szeletelés. 0. elemmel kezdünk. (ahogy C-ben, de MATLAB-ban 1-t l)
Sorozattípusok közös jellemz i Sorozattípusok: karakterlánc, lista, tuple... Ezeknél m ködik az indexelés és szeletelés. 0. elemmel kezdünk. (ahogy C-ben, de MATLAB-ban 1-t l) s = 'Szelet'
Sorozattípusok közös jellemz i Sorozattípusok: karakterlánc, lista, tuple... Ezeknél m ködik az indexelés és szeletelés. 0. elemmel kezdünk. (ahogy C-ben, de MATLAB-ban 1-t l) s = 'Szelet' Példák: s[0], s[2:4], s[:3] = s[0:3], s[-2:] = s[-2:6], s[2:-2]
Sorozattípusok közös jellemz i Sorozattípusok: karakterlánc, lista, tuple... Ezeknél m ködik az indexelés és szeletelés. 0. elemmel kezdünk. (ahogy C-ben, de MATLAB-ban 1-t l) s = 'Szelet' Példák: s[0], s[2:4], s[:3] = s[0:3], s[-2:] = s[-2:6], s[2:-2] A fels határ nincs bent sohasem: 2:5 = 2, 3, 4.
Sorozattípusok közös jellemz i Sorozattípusok: karakterlánc, lista, tuple... Ezeknél m ködik az indexelés és szeletelés. 0. elemmel kezdünk. (ahogy C-ben, de MATLAB-ban 1-t l) s = 'Szelet' Példák: s[0], s[2:4], s[:3] = s[0:3], s[-2:] = s[-2:6], s[2:-2] A fels határ nincs bent sohasem: 2:5 = 2, 3, 4. Használható a len() (hossz) függvény rájuk. len('szelet') == 6
Sorozattípusok közös jellemz i Sorozattípusok: karakterlánc, lista, tuple... Ezeknél m ködik az indexelés és szeletelés. 0. elemmel kezdünk. (ahogy C-ben, de MATLAB-ban 1-t l) s = 'Szelet' Példák: s[0], s[2:4], s[:3] = s[0:3], s[-2:] = s[-2:6], s[2:-2] A fels határ nincs bent sohasem: 2:5 = 2, 3, 4. Használható a len() (hossz) függvény rájuk. len('szelet') == 6 Használható a max() és min() függvény rájuk, számoknál sum()
Sorozattípusok közös jellemz i Sorozattípusok: karakterlánc, lista, tuple... Ezeknél m ködik az indexelés és szeletelés. 0. elemmel kezdünk. (ahogy C-ben, de MATLAB-ban 1-t l) s = 'Szelet' Példák: s[0], s[2:4], s[:3] = s[0:3], s[-2:] = s[-2:6], s[2:-2] A fels határ nincs bent sohasem: 2:5 = 2, 3, 4. Használható a len() (hossz) függvény rájuk. len('szelet') == 6 Használható a max() és min() függvény rájuk, számoknál sum() Benne van-e elem: 1 in (1,4,2) # True
Függvények és hívásuk Függvények jellemz i: argumentumaik lehetnek (zárójelben felsorolva, vessz vel elválasztva) csinálhatnak valamit (print kiír képerny re) visszatérnek valamilyen értékkel (esetleg None-nal) Függvények hívása: kulcsszavas argumentumok (többi után) print(1, 3, 'alma', sep=':', end='\n\n') alapértelmezett értékek (sep=' ', end='\n'), ha nem adom meg, azt használja
Szótárak (dict) (haladó) Egy kulcs azonosít egy elemet.
Szótárak (dict) (haladó) Egy kulcs azonosít egy elemet. Példák: d = { 1: 'alma', (18.4, 47.2): 'Fehérvár', 'alak': 'téglalap' } print(d['alak']) # téglalap print(d.keys()) # [1, (18.4, 47.2), 'alak'] d[1j] = 'komplex' # Új elem beillesztése for key in d: print(key, d[key])
Szótárak (dict) (haladó) Egy kulcs azonosít egy elemet. Példák: d = { 1: 'alma', (18.4, 47.2): 'Fehérvár', 'alak': 'téglalap' } print(d['alak']) # téglalap print(d.keys()) # [1, (18.4, 47.2), 'alak'] d[1j] = 'komplex' # Új elem beillesztése for key in d: print(key, d[key]) Csak nem-módosítható elem lehet kulcs.
Logikai (bool) Értéke lehet True és False.
Logikai (bool) Értéke lehet True és False. Vizsgálatnál hamis érték ek (a nullák és az üresek): 0 0.0 0+0j [] () '' {}
Logikai (bool) Értéke lehet True és False. Vizsgálatnál hamis érték ek (a nullák és az üresek): 0 0.0 0+0j [] () '' {} Példák: s = 'alma' # Értékadás, nem vizsgálat 2 < len(s) < 10 # True s == s.lower() and s!= 'apple' # True not 3 == 4 # True 'a' in s # True s is None # False s.endswith('ma') # True isinstance(s, str) # True
Adattípusok egymásba alakítása int(5.2) # csonkol int('2013') float(3) # 3.0 == 3. float('3.14') int('3.14') # hibás bool(0) # False tuple([1, 3, 5]) 2.5*array([1,5,3]) # numpy (pylab) sorvektorrá
Adattípusok összefoglalása megváltoztatható (mutable) nem az (immutable) list set dict int,oat,complex str tuple frozenset bool A jobboldaliak lehetnek szótárak indexei.
Vázlat 1 A Python adatszerkezetei A Python vezérlési szerkezetei 2 Modulok kezelése Példák modulokra
A Python vezérlési szerkezetei if while for def class try
A Python vezérlési szerkezetei if while for def class try Vázlatosan: szerkezet eleje: els utasítás második utasítás harmadik utasítás ez már nincs benne
A Python vezérlési szerkezetei if while for def class try Vázlatosan: szerkezet eleje: els utasítás második utasítás harmadik utasítás ez már nincs benne Fontos a : és a behúzások.
Feltételes elágazás Pythonban D = b**2-4*a*c if D < 0: print("nincs valós gyök.") elif D == 0: print("kett s (valós) gyök van.") else: print("két eltér valós gyök van.")
Függvények Pythonban from math import sqrt def masodfoku(a, b, c): D = b**2-4*a*c if D < 0: print("nincs valós gyök.") return elif D == 0: print("kett s (valós) gyök van.") else: print("két eltér valós gyök van.") x1 = (-b + sqrt(d)) / 2*a x2 = (-b - sqrt(d)) / 2*a return x1, x2
for ciklus Pythonban Python példa; fontos a : és a behúzások: szoveg = 'alma' for karakter in szoveg: print karakter print karakter.upper()
for ciklus Pythonban Python példa; fontos a : és a behúzások: szoveg = 'alma' for karakter in szoveg: print karakter print karakter.upper() Általános alakja: for <változó> in <sorozat>: <parancsok egyformán behúzva> <parancs, ami már nincs a ciklusban>
for ciklus Pythonban Python példa; fontos a : és a behúzások: szoveg = 'alma' for karakter in szoveg: print karakter print karakter.upper() Általános alakja: for <változó> in <sorozat>: <parancsok egyformán behúzva> <parancs, ami már nincs a ciklusban> A sorozat lehet például lista vagy tuple, ekkor az elemeiken megy végig a ciklus, de lehet karakterlánc is, akkor a karakterein.
for ciklus Pythonban range Gyakran használjuk for-ral a range(n) függvényt.
for ciklus Pythonban range Gyakran használjuk for-ral a range(n) függvényt. range([start,] stop[, step])
for ciklus Pythonban range Gyakran használjuk for-ral a range(n) függvényt. range([start,] stop[, step]) Listává alakítva:
for ciklus Pythonban range Gyakran használjuk for-ral a range(n) függvényt. range([start,] stop[, step]) Listává alakítva: range(5) ==> [0, 1, 2, 3, 4]
for ciklus Pythonban range Gyakran használjuk for-ral a range(n) függvényt. range([start,] stop[, step]) Listává alakítva: range(5) ==> [0, 1, 2, 3, 4] range(2, 5) ==> [2, 3, 4]
for ciklus Pythonban range Gyakran használjuk for-ral a range(n) függvényt. range([start,] stop[, step]) Listává alakítva: range(5) ==> [0, 1, 2, 3, 4] range(2, 5) ==> [2, 3, 4] range(2, 8, 3) ==> [2, 5]
Ciklus és számtípusok példa for i in [1, 1.03, 1j, 5]: print i, i**100 Eredmény: 1 1 1.03 19.2186319809 1j (1+0j) 5 78886090522101180541172856528278622967320643510902300
Listaértelmezés [2**i for i in range(1, 6)] # --> [2, 4, 8, 16, 32] word_list = ["alma", "körte", "banán"] [word.upper() for word in word_list] # --> ["ALMA", "KÖRTE", "BANÁN"] [ (i, j) for i in range(7) for j in range(2, i) if i + j < 8 ] # --> [(3, 2), (4, 2), (4, 3), (5, 2)]
while ciklus Pythonban def Euklidesz(a, b): " Visszaadja a legnagyobb közös osztót." if a < b: a, b = b, a while b!= 0: print('{0:5} {1:5}'.format(a, b)) a, b = b, a % b return a lnko = Euklidesz(19*5*5*3*2, 11*7*5*3*2) print("a legnagyobb közös osztó:", lnko) # --> 5*3*2 = 30
while ciklus Pythonban Eredmény: 2850 2310 2310 540 540 150 150 90 90 60 60 30 A legnagyobb közös osztó: 30
Python 3-as verzió Nem teljesen kompatibilis a 2-essel. Pár elavult dolgot helyreraktak. Függvény lett a print: print(1, 'alma', sep=':', le=f) range nem hoz létre listát. for-ban ugyanúgy használható, ha lista kell list(range(10000)) Küls modulok nem mind léteznek még 3-ashoz. Alapból utf-8 kódolás (nem kell megadni). Ékezetes sztringek könnyebb kezelése. Általában python3 utasítással indíthatjuk, ha telepítve van. Pár dolog python2 újabb változataiban is használható: from future import division # 1/2 = 0.5 from future import print_function
Vázlat Modulok kezelése Példák modulokra 1 A Python adatszerkezetei A Python vezérlési szerkezetei 2 Modulok kezelése Példák modulokra
Vázlat Modulok kezelése Példák modulokra 1 A Python adatszerkezetei A Python vezérlési szerkezetei 2 Modulok kezelése Példák modulokra
Saját modulok (haladó) Modulok kezelése Példák modulokra pi = 3.14 smodul.py def negyzet(a): return a*a if name == ' main ': print(negyzet(5)) Hogyan használhatom modulként? Mi fut le importáláskor? Figyeljük meg, hány aláhúzás van?
Saját modulok (haladó) Modulok kezelése Példák modulokra pi = 3.14 smodul.py def negyzet(a): return a*a if name == ' main ': print(negyzet(5)) modulhivo.py import smodul print(smodul.pi) print(smodul.negyzet(5)) from smodul import pi print(pi)
Almodulok Modulok kezelése Példák modulokra A modulok gyakran almodulokat is tartalmazhatnak.
Almodulok Modulok kezelése Példák modulokra A modulok gyakran almodulokat is tartalmazhatnak. Például az os modul path almoduljában vannak az útvonalak összerakásával, szétszedésével kapcsolatos függvények.
Almodulok Modulok kezelése Példák modulokra A modulok gyakran almodulokat is tartalmazhatnak. Például az os modul path almoduljában vannak az útvonalak összerakásával, szétszedésével kapcsolatos függvények. Példák: import os os.path.join('python', 'nx', 'xx.py') python/nx/xx.py (Un*x), python\nx\xx.py (Windows) from os import path path.join('python', 'nx', 'xx.py') from os.path import join from os.path import * join('python', 'nx', 'xx.py')
Almodulok Modulok kezelése Példák modulokra A modulok gyakran almodulokat is tartalmazhatnak. Például az os modul path almoduljában vannak az útvonalak összerakásával, szétszedésével kapcsolatos függvények. Példák: import os os.path.join('python', 'nx', 'xx.py') python/nx/xx.py (Un*x), python\nx\xx.py (Windows) from os import path path.join('python', 'nx', 'xx.py') from os.path import join from os.path import * join('python', 'nx', 'xx.py')
Almodulok Modulok kezelése Példák modulokra A modulok gyakran almodulokat is tartalmazhatnak. Például az os modul path almoduljában vannak az útvonalak összerakásával, szétszedésével kapcsolatos függvények. Példák: import os os.path.join('python', 'nx', 'xx.py') python/nx/xx.py (Un*x), python\nx\xx.py (Windows) from os import path path.join('python', 'nx', 'xx.py') from os.path import join from os.path import * join('python', 'nx', 'xx.py')
Almodulok Modulok kezelése Példák modulokra A modulok gyakran almodulokat is tartalmazhatnak. Például az os modul path almoduljában vannak az útvonalak összerakásával, szétszedésével kapcsolatos függvények. Példák: import os os.path.join('python', 'nx', 'xx.py') python/nx/xx.py (Un*x), python\nx\xx.py (Windows) from os import path path.join('python', 'nx', 'xx.py') from os.path import join from os.path import * join('python', 'nx', 'xx.py')
Almodulok Modulok kezelése Példák modulokra A modulok gyakran almodulokat is tartalmazhatnak. Például az os modul path almoduljában vannak az útvonalak összerakásával, szétszedésével kapcsolatos függvények. Példák: import os os.path.join('python', 'nx', 'xx.py') python/nx/xx.py (Un*x), python\nx\xx.py (Windows) from os import path path.join('python', 'nx', 'xx.py') from os.path import join from os.path import * join('python', 'nx', 'xx.py')
Almodulok Modulok kezelése Példák modulokra A modulok gyakran almodulokat is tartalmazhatnak. Például az os modul path almoduljában vannak az útvonalak összerakásával, szétszedésével kapcsolatos függvények. Példák: import os os.path.join('python', 'nx', 'xx.py') python/nx/xx.py (Un*x), python\nx\xx.py (Windows) from os import path path.join('python', 'nx', 'xx.py') from os.path import join from os.path import * join('python', 'nx', 'xx.py')
Vázlat Modulok kezelése Példák modulokra 1 A Python adatszerkezetei A Python vezérlési szerkezetei 2 Modulok kezelése Példák modulokra
Modulok kezelése Példák modulokra Standard könyvtár B vebben http://docs.python.org The Python Standard Library os: az operációs rendszerrel kapcsolatos dolgokban segít (fájlmásolás, link létrehozása, parancs végrehajtása) sys: a Python m ködésével kapcsolatos modul (elérési útvonal, argumentumok kezelése) urllib: a weboldalak eléréséhez. re: reguláris kifejezések kezeléséhez random: véletlen számok (egyenletes vagy normáis eloszlású véletlen szám, visszatevés nélküli mintavétel listából) subprocess: alfolyamatok kezelése xml: XML-el kapcsolatos modul cgi, cgitb: CGI-szkripteléssel kapcsolatos modulok gettext: programok embernyelvi fordításához (en, hu, de) unittest, doctest: programok teszteléséhez
Küls modulok Modulok kezelése Példák modulokra numpy: mátrixm veletek, lineáris egyenletek pylab ( matplotlib): a MATLAB-hoz hasonló stílusú számítások, függvényrajzolás, numpy-t használja scipy: széls értékkezelés, numerikus integrálás igraph: gráfok kezelése és kirajzolása, gyors, kirajzoláshoz nem kell matplotlib cxnet: az igraphra épül gráfelemz NetworkX: gráfok kezelése, kirajzolása matplotlibbel django: web-keretrendszer Pillow: Python Image Library utóda, képek feldolgozása, adataik kinyerése pandas: adatanalízis
Pylab Modulok kezelése Példák modulokra from pylab import * x = linspace(-pi, pi, 1024) y = 0 for i in range(1,16,2): # 1, 3,... 15 y += sin(i*x)/i plot(x,4/pi*y) title('négyszögjel Fourier-sora 15 tag') savefig('fourier15.png') show()
Adatbázis: DB API 2.0 (haladó) Modulok kezelése Példák modulokra import pgdb # lehet itt MySQLdb, oracledb... connection = pgdb.connect(database='hp', user='diak', password='diak', dsn='db.arek.uni-obuda.hu') cursor = connection.cursor() # Itt lehet az utasítást megadni: cursor.execute("select * FROM adatok;") # Adatbázis módosításkor kell: connection.commit() eredmeny = cursor.fetchall() print(*eredmeny, sep=", ")
CGI (haladó) Modulok kezelése Példák modulokra import cgi import cgitb; cgitb.enable() # A hibafigyeléshez form = cgi.fieldstorage() # CGI-ként a kapott értékek if form.has_key('title'): title = form.getvalue('title') else: title = "CGI-oldal" print "Content-Type: text/html\n" ## CGI print "<html><body>" # és így tovább.
django Modulok kezelése Példák modulokra Az SQL-utasításokat és a CGI-t kiválthatjuk a django web-keretrendszerrel. http://djangoproject.com
Django Modulok kezelése Példák modulokra Django web-keretrendszer Webserver Apache fejlesztésnél saját Adatbázis PostgreSQL fejlesztésénél SQLight