A Python nyelv A Python moduljai
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
Mi a Python? Általános célú programnyelv rengeteg beépített és egyéb modullal.
A Python alapjainak áttekintése Horváth Árpád
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)
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
Példaprogram feladatkit¶zés
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
Példaprogram megvalósítás from math import sqrt
Készítsünk egy függvényt, amely a
ax 2 + bx + c = 0 egyenlet gyökeit adja vissza. A gyökök:
x1,2 =
−b ±
Horváth Árpád
√
b 2 − 4ac 2a
Python áttekintés
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
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
A szerz®
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
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
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
Számok
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
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
Horváth Árpád
Horváth Árpád
Python áttekintés
'AREK '*3
# AREK AREK AREK
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
Karakterláncok format metódusa (haladó)
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
Listák (list)
Bármilyen típusú lehetnek
'{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
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
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
Horváth Árpád
Adatszerkezetek Vezérlési szerkezetek
Rendezett sorozatok (tuple)
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
Sorozattípusok közös jellemz®i Sorozattípusok: karakterlánc, lista, tuple. . .
Listához hasonló, de nem módosítható
0. elemmel kezdünk. (ahogy C-ben, de MATLAB-ban 1-t®l)
t = (1, 'AREK', [1,2])
s = 'Szelet'
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ó.
Horváth Árpád
Ezeknél m¶ködik az indexelés és szeletelés.
Python áttekintés
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.
len() (hossz) függvény rájuk. len('Szelet') == 6 Használható a max() és min() függvény rájuk, sum() Benne van-e elem: 1 in (1,4,2) # True Használható a
Horváth Árpád
Python áttekintés
számoknál
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
A Python nyelv A Python moduljai
Függvények és hívásuk
Adatszerkezetek Vezérlési szerkezetek
Szótárak (dict) (haladó) Egy kulcs azonosít egy elemet.
Függvények jellemz®i:
Példák:
argumentumaik lehetnek (zárójelben felsorolva, vessz®vel
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
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
elválasztva)
nem adom
meg, azt használja
for key in d: print(key, d[key]) Csak nem-módosítható elem lehet kulcs.
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
Logikai (bool)
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
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
Horváth Árpád
Python áttekintés
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á
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
Adattípusok összefoglalása
megváltoztatható (mutable)
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
A Python vezérlési szerkezetei
nem az (immutable) int,oat,complex str
list
tuple
set
frozenset
dict bool A jobboldaliak lehetnek szótárak indexei.
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
Feltételes elágazás Pythonban
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.
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
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.")
Horváth Árpád
Python áttekintés
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
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
for ciklus Pythonban Python példa; fontos a
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
for ciklus Pythonban range :
és a behúzások:
szoveg = 'alma' for karakter in szoveg: print karakter print karakter.upper()
range(n) range([start,] stop[, step]) Gyakran használjuk for-ral a
függvényt.
Listává alakítva:
Általános alakja:
range(5) ==> [0, 1, 2, 3, 4] range(2, 5) ==> [2, 3, 4] range(2, 8, 3) ==> [2, 5]
for 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. Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Horváth Árpád
Adatszerkezetek Vezérlési szerkezetek
Ciklus és számtípusok
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
Listaértelmezés
példa for i in [1, 1.03, 1j, 5]: print i, i**100
[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"]
Eredmény: 1 1 1.03 19.2186319809 [ 1j (1+0j) 5 7888609052210118054117285652827862296732064351090230047702789306640625
(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)] Horváth Árpád
Python áttekintés
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
while ciklus Pythonban
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
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 Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
Adatszerkezetek Vezérlési szerkezetek
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
pi = 3.14
smodul.py
def negyzet(a): return a*a
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
if __name__ == '__main__': print(negyzet(5))
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 Horváth Árpád
Python áttekintés
Hogyan használhatom modulként? Mi fut le importáláskor?
Figyeljük meg, hány aláhúzás van?
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
Saját modulok (haladó) pi = 3.14
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
Almodulok smodul.py
A modulok gyakran almodulokat is tartalmazhatnak. Például az os modul path almoduljában vannak az útvonalak
def negyzet(a): return a*a
ö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)
if __name__ == '__main__': print(negyzet(5)) modulhivo.py import smodul print(smodul.pi) print(smodul.negyzet(5)) from smodul import pi print(pi)
from os import path path.join('python', 'nx', 'xx.py') from os.path import join from os.path import * join('python', 'nx', 'xx.py')
Horváth Árpád
Python áttekintés
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
Standard könyvtár
Küls® modulok
B®vebben http://docs.python.org The Python Standard Library
numpy: mátrixm¶veletek, lineáris egyenletek
os: az operációs rendszerrel kapcsolatos dolgokban segít
pylab (∈ matplotlib): a MATLAB-hoz hasonló stílusú
(fájlmásolás, link létrehozása, parancs végrehajtása)
számítások, függvényrajzolás, numpy-t használja
sys: a Python m¶ködésével kapcsolatos modul (elérési útvonal,
scipy: széls®értékkezelés, numerikus integrálás
argumentumok kezelése)
igraph: gráfok kezelése és kirajzolása, gyors, kirajzoláshoz nem
urllib: a weboldalak eléréséhez.
kell matplotlib
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)
cxnet: az igraphra épül® gráfelemz® NetworkX: gráfok kezelése, kirajzolása matplotlibbel
subprocess: alfolyamatok kezelése
django: web-keretrendszer
xml: XML-el kapcsolatos modul
Pillow: Python Image Library utóda, képek feldolgozása,
cgi, cgitb: CGI-szkripteléssel kapcsolatos modulok
adataik kinyerése
gettext: programok embernyelvi fordításához (en, hu, de)
pandas: adatanalízis
unittest, doctest: programok teszteléséhez Horváth Árpád
Python áttekintés
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
Pylab
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
Adatbázis: DB API 2.0 (haladó) import pgdb # lehet itt MySQLdb, oracledb...
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()
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=", ")
Horváth Árpád
Python áttekintés
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
CGI (haladó)
django
import cgi import cgitb; cgitb.enable() # A hibafigyeléshez form = cgi.FieldStorage() # CGI-ként a kapott értékek Az SQL-utasításokat és a CGI-t kiválthatjuk a django
if form.has_key('title'): title = form.getvalue('title') else: title = "CGI-oldal"
web-keretrendszerrel. http://djangoproject.com
print "Content-Type: text/html\n" ## CGI print "" # és így tovább. Horváth Árpád
Python áttekintés
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
Django
Django web-keretrendszer
Webserver
Adatbázis
Apache
PostgreSQL
fejlesztésnél saját
fejlesztésénél SQLight
Horváth Árpád
Python áttekintés