Mi a Python? A Python alapjainak áttekintése Általános célú programnyelv rengeteg beépített és egyéb modullal. 2016. február 29. 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 Példaprogram megvalósítás from math import sqrt 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 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 Miért Python? Na vajon miért? Guido von Rossum, holland A szerz kedvence a Monty Jelenleg a Google Python's Flying Circus alkalmazottja A dokumentációban ajánlott a Monty Python idézet Számok Karakterláncok (str, sztring) egész (int) 1, 2123123123123123118978970 'Szelet', 'alma\nkörte', "that's it" Többsoros karakterlánc lebeg pontos ( oat) '''A többsoros szövegeket három idéz jel (" vagy ') határolja.''' 3.14, 1.6e-19 (math modul) komplex (complex) 1+3j, 2j Metódusok: split, splitlines, upper, center, rjusti, format... (cmath modul) M veletek: + M veletek +, -, *, /, ** (hatvány) M veletek egészeknél % (mod), //, bitenkénti m veletek 'AREK '*3 # AREK AREK AREK
Karakterláncok format metódusa (haladó) Listák (list) '{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 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) Sorozattípusok közös jellemz i 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: 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 Szótárak (dict) (haladó) 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 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) Adattípusok egymásba alakítása É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 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 A Python vezérlési szerkezetei megváltoztatható (mutable) list set dict nem az (immutable) int,oat,complex str tuple frozenset bool A jobboldaliak lehetnek szótárak indexei. 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 Függvények Pythonban from math import sqrt 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.") 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 for ciklus Pythonban range 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> 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] 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. Ciklus és számtípusok Listaértelmezés 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 7888609052210118054117285652827862296732064351090230047702789306640625 [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 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 Eredmény: 2850 2310 2310 540 540 150 150 90 90 60 60 30 A legnagyobb közös osztó: 30 lnko = Euklidesz(19*5*5*3*2, 11*7*5*3*2) print("a legnagyobb közös osztó:", lnko) # --> 5*3*2 = 30 Python 3-as verzió Saját modulok (haladó) 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 pi = 3.14 def negyzet(a): return a*a if name == ' main ': print(negyzet(5)) smodul.py 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ó) Almodulok pi = 3.14 def negyzet(a): return a*a if name == ' main ': print(negyzet(5)) smodul.py modulhivo.py import smodul print(smodul.pi) print(smodul.negyzet(5)) from smodul import pi print(pi) 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') Standard könyvtár Küls modulok 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 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 Adatbázis: DB API 2.0 (haladó) 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() 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ó) django 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" Az SQL-utasításokat és a CGI-t kiválthatjuk a django web-keretrendszerrel. http://djangoproject.com print "Content-Type: text/html\n" ## CGI print "<html><body>" # és így tovább.
Django Django web-keretrendszer Webserver Apache fejlesztésnél saját Adatbázis PostgreSQL fejlesztésénél SQLight