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
A Python alapjainak áttekintése
rengeteg beépített és egyéb modullal.
Horváth Árpád
Óbudai Egyetem Alba Regia Egyetemi Központ (AREK) Székesfehérvár
2011. szeptember 16.
Objektumorientált, de kezd®k err®l megfeledkezhetnek Funkcionális programozást is lehet®vé teszi Platformfüggetlen bytekódot készít Könnyen beágyazhatóak C és Fortran programok
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) x1 /= 2*a x2 = -b - sqrt(D) x2 /= 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 (string)
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: upper, center, rjust, split, splitlines. . .
(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 # AREKAREKAREK
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
Listák (list)
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
n-esek (tuple)
Bármilyen elemei lehetnek Listához hasonló, de nem módosítható
l = [1, "alma", 2+3j] Módosíthatjuk: hozzáf¶zhetünk, beszúrhatunk és törölhetünk
t = (1, "AREK", [1,2])
bel®le elemeket
Példák értékadásra:
Metódusai: append, insert, count, pop. . . Új lista egyszer¶ el®állítása másikból:
lista = ["alma", "egres", "barack"] hosszak = [ len(i) for i in lista ] # [4, 5, 6] lista.append("dió") lista.count("alma") # 1
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
(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
Adatszerkezetek Vezérlési szerkezetek
Indexek, szeletek
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
Szótárak (dictionary)
M¶ködnek listaszer¶ objektumoknál: karakterlánc, lista, tuple
Egy kulcs azonosít egy elemet.
0. elemmel kezdünk. (6∼MATLAB)
Példák:
s = "Szelet"
d = {1: "alma", (18.4 , 47.2): "Fehérvár", "alak": "téglalap" } print d[1] # alma print d.keys() # [a, (18.4 , 47.2), "alak"] d[1j] = "komplex"
+---+---+---+---+---+---+ | S | z | e | l | e | t | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1 Példák:
s[0], s[2:4], s[:3], s[-2:] Használható a len() (hossz) függvény
Horváth Árpád
Python áttekintés
rájuk.
Python áttekintés
Csak nem megváltoztatható elem lehet kulcs.
Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
Logikai (boolean)
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
A Python vezérlési szerkezetei
Értéke lehet True és False. 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
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
Vizsgálatnál hamis érték¶ek (a nulla és az üresek):
:
és a behúzások.
0; []; (,); ""; {}
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
Feltételes elágazás Pythonban
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) x1 /= 2*a x2 = -b - sqrt(D) x2 /= 2*a return x1, x2 Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
Komplex változat
A Python nyelv A Python moduljai
Adatszerkezetek Vezérlési szerkezetek
for ciklus Pythonban Python példa; fontos a
from __future__ import division from cmath import sqrt def masodfoku(a, b, c): """Másodfokú egyenlet megoldását adja vissza.
<parancs, ami már nincs a ciklusban> A listaszer¶ objektum lehet például lista vagy tuple, ekkor az elemeiken megy végig a ciklus, de lehet karakterlánc is, akkor a karakterein. Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
for ciklus Pythonban range
Horváth Árpád
Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
Adatszerkezetek Vezérlési szerkezetek
Ciklus és számtípusok
range(n) range([start,] stop, [step]) range(5) -> [0, 1, 2, 3, 4] range(2, 5) -> [2, 3, 4] range(2, 8, 3) -> [2, 5] Gyakran használjuk for-ral a
szoveg = "alma" for karakter in szoveg: print karakter print karakter.upper() for in <listaszer¶ objektum>: <parancsok egyformán behúzva>
sD = sqrt(b**2 - 4*a*c) x1 = -b + sD x1 /= 2*a x2 = -b - sD x2 /= 2*a return x1, x2
A Python nyelv A Python moduljai
és a behúzások:
Általános alakja:
a, b, c: az egyenlet együtthatói """
Horváth Árpád
:
függvényt.
Python áttekinté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 78886090522101180541172856528278622967320643510902300477027
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 "%5d %5d" % (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 Lehet máshogy cserélni:
lnko = Euklidesz(19*5*5*3*2, 11*7*5*3*2) print "A legnagyobb közös osztó:", lnko Horváth Árpád
A Python nyelv A Python moduljai
Python áttekintés
a, b = (a,b) if a>b else (b,a) # C-ben: feltétel?igaz-érték:hamis-érték
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
3-as verzió
Saját modulok pi = 3.14
Nem teljesen kompatibilis a 2-essel. Pár elavult dolgot helyreraktak. print függvény lett print(a) range iterátort ad lista helyett, ami nem hozza létre az összes számot rögtön: for-ban ugyanúgy, ha lista kell list(range(8)) Küls® modulok nem mind léteznek 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.
Horváth Árpád
Python áttekintés
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 Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
Almodulok
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
Standard könyvtár os: az operációs rendszerrel kapcsolatos dolgokban segít
A modulok gyakran almodulokat is tartalmazhatnak.
(fájlmásolás, link létrehozása, parancs végrehajtása)
Például az os modul path almoduljában vannak az útvonalak
sys: a Python m¶ködésével kapcsolatos modul (elérési útvonal,
összerakásával, szétszedésével kapcsolatos függvények.
argumentumok kezelése)
Példák:
urllib: a weboldalak eléréséhez.
import os os.path.join('python', 'nx', 'xx.py') 'python/nx/xx.py' (Un*x), 'python\nx\xx.py' (Windows)
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) thread, threading: szálkezelés
from os import path path.join('python', 'nx', 'xx.py')
xml: XML-el kapcsolatos modul cgi, cgitb: CGI-szkripteléssel kapcsolatos modulok gettext: programok embernyelvi fordításához
from os.path import join from os.path import * join('python', 'nx', 'xx.py')
doctest, unittest: programok embernyelvi fordításához B®vebben http://python.org Dokumentation The Python Standard Library
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
Küls® modulok
Pylab
numpy: mátrixm¶veletek, lineáris egyenletek scipy: széls®értékkezelés, numerikus integrálás igraph: gráfok kezelése és kirajzolása, gyors pylab (∈ matplotlib): a MATLAB-hoz hasonló stílusú számítások, függvényrajzolás (numpy-t használja) NetworkX: gráfok kezelése, kirajzolása matplotlibbel PIL: Python Image Library PyTables: nagy mennyiség¶ hierarchikus adat kezelése Star-P: A numpy párhuzamos rendszerekre írt megfelel®je,
from pylab import * x = linspace(-pi, pi, 1024) y = zeros(1024) for i in range(1,16,2): # 1, 3, ... 15 y += sin(i*x)/i plot(x,4/pi*y) title(u"Négyszögjel Fourier-sora 15 tag") savefig("fourier15.png") show()
kereskedelmi
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
NetworkX, packages
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
Adatbázis: DB API 2.0
import packages, pylab, lknegyzetek
import pgdb # lehet itt MySQLdb, oracledb...
class DegreeDistribution(): def __init__(self, graph, direction=None, verbose=True): (...) def errorbar(self, intervals=None): (...) def info(self, file=None): (...)
connection = pgdb.connect(database='hp', user='diak',\ password='diak', dsn='mail.roik.bmf.hu')
G=packages.get_graph() DD = DegreeDistribution(graph=G) DD.info() DD.info("info.txt") DD.errorbar([(1,100), (101, 20000), (0,100000)]) Horváth Árpád
Python áttekintés
A Python nyelv A Python moduljai
Modulok kezelése Példák modulokra
CGI 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 "" # és így tovább. Horváth Árpád
Python áttekintés
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() for sor in eredmeny: print ", ".join(sor) Horváth Árpád
Python áttekintés