Python I.
Vincze Dávid Miskolci Egyetem, IIT
[email protected] http://users.iit.uni-miskolc.hu/~vinczed/
Python I. ● ● ●
● ● ● ● ●
●
Általános célú szkriptnyelv A név Monthy Python után De ettől még kígyókat is láthatunk :) Platformfüggetlen Az értelmezője nyílt forrású Jól olvasható kód (Kényszerített) Hatékony, gyors fejlesztést tesz lehetővé Sikeres nyelv: Google, NASA, Facebook, stb. http://www.python.org/
Python I. ● ●
●
●
A szkriptfileokat .py végződéssel szokás ellátni Bytekódot generál és ezt futtatja –
El is menti .pyc végződésű filenévvel
–
Automatikusan generálja
Alapból interaktív interpreter –
Lássuk!
–
Változók értékeit kiírja ha hivatkozunk rá
Egyébként szkriptfileokat futtat, és sorrol sorra halad...
Python I. ●
Hi World! >>> 'Hello World!' 'Hello World!' >>> print "Hello World!" Hello World!
●
Látjuk a különbséget?
Python I. ● ●
●
Nézzünk scriptet! Megadjuk a betöltő programot: Shebang + interpreter: #!/usr/bin/python Utána kezdhetjük magát a scriptet #!/usr/bin/python print "elso python szkriptem"
#!
Python I. ● ●
●
Változók / Típusok Nem kell deklarálni, memóriát foglalni (automatikus) Sztring: –
'spa"m'
–
"spa'm"
–
'''... spam …'''
–
"""... spam …""" (több sorra is átterjedhet)
–
"s\tp\na\0m"
–
r"C:\new\test.spm"
–
u'eggs\u0020spam'
Python I. ●
●
Automatikus összefűzés (nincs külön operátor) >>> print 'beton' "kevero" """KAMAZ""" betonkeveroKAMAZ Indexelni lehet a karaktereket: sz='beton' print sz[2] print 'beton'[2]
●
Minden sztring is objektum!
Python I. ●
Indexelés lehet cifrább: sz='beton' sz[2:4] → 'to' sz[2:] → 'ton' sz[:4] → 'beto' sz[:] → 'beton' sz[:-3] → 'be' sz[-3:] → 'ton' sz[-3:-2] → 't'
Python I. ●
●
●
●
●
●
Integer, long i=5 , i=5L Float - lebegőpontos f=5.0 Boolean b=True, b=False (nagy kezdőbetű!) List l=[ 0, 15, 'beton', i ] (index!) Tuple t=( 0, 15, 'beton', i ) (nem lehet frissíteni) Dictionary (asszoc. tömb) {'beton': 5, 'teherauto': 'KAMAZ'}
Python I. ●
Ritkábban használtak: –
Komplex szám: 5+4j
–
Bytes: b'akarmi' → (sztring) bytes('talicska') → (sztring)
–
Bytearray: ua. mint bytes, csak módosítható ●
–
Set: s={5, 9.9, 'beton'} ● ● ● ●
–
bytearray([66, 67, 68]) → bytearray(b'BCD') Halmazműveletek (intersect, union, stb.) 1 elem csak 1x lehet tag! s.add(4) → {4, 5, 9.9, 'beton'} s.add(5) → {4, 5, 9.9, 'beton'}
Frozenset, mint az előbb
Python I. ●
● ●
●
Névkonvenciók 0-9 A-Z a-z Csak betűvel kezdődhet Case-sensitive! True != true Beton != beton
●
Vannak fenntartott nevek, kulcsszavak: pl. for, if, and, or, stb.
Python I. ●
● ●
Utasítások közé tehetünk pontosvesszőket, de alapvetően a sortörés miatt nem muszáj Karakterkészlet Pszeudó-komment a file elején # -*- coding: ISO-8859-1 -*# -*- coding: ISO-8859-2 -*# -*- coding: UTF-8 -*-
Python I. ●
Típuskonverzió –
int(), float(), …
–
str() vagy grave-accent `i` i=303 print str(i) " - " `i`
●
Komment –
# bla bla
Python I. ●
Vezérlési szerkezetek –
if elif else
–
for x in sorozat
–
while
–
Kettőspontok a kifejezés után
–
Indent-elés! Kötelező! Meghatározza a blokkot.
Python I. ●
Vezérlési szerkezetek if akarmi: ... elif akarmi2: ... else: ...
Python I. ●
Vezérlési szerkezetek if i>0: print 'pozitiv' elif i<0: print 'negativ' else: print 'nulla'
Python I. ●
Vezérlési szerkezetek –
for x in lista: ●
–
for x in tuple: ●
–
Tuple elemei kerülnek x-be
for x in sztring: ●
–
Lista elemei kerülnek x-be
String karakterei kerülnek x-be
Szekvencia generálás listaként: range() fgv. range(5) [0, 1, 2, 3, 4]
Python I. ●
Vezérlési szerkezetek while True: print 'Ez bizony vegtelen ciklus' print 'Ezt nem irom mar ki soha'
# -*- coding: UTF-8 -*szam = 2**3 # ** → hatvanyozas paros = [] # ures lista (miert is kell ez?) paratlan = [] while (szam != 0): szam = int(raw_input("Szám? ")) if (szam != 0): if (szam % 2 == 0): paros.append(szam) else: paratlan.append(szam) print "Párosak: ",paros print "Páratlanok: ",paratlan
Python I. ●
Objektum objnev.metodusev() objnev.adattag
●
Minden objektum.
●
Természetesen definiálhatunk saját osztályokat.
Python I. ●
Objektum pl. string objektum >>> 'beton'.replace('b','p').replace('e','i') 'piton' >>> 'beton'.find('t') 2 >>> 'beton'.split('t') ['be', 'on'] >>> list('beton') ['b', 'e', 't', 'o', 'n'] >>> 'x'.join(['b', 'e', 't', 'o', 'n']) 'bxextxoxn'
Python I. ●
Modulok import modulnev pl. import sys, os, base64
●
Olvassunk be valamit a konzolról!
Python I. ●
Modulok >>> import sys >>> sys.stdin.readline() beton 'beton\n' >>> from sys import * >>> stdin.readline() >>> raw_input('kerek szoveget: ') kerek szoveget: beton 'beton'
Python I. ●
Függvények def fuggveny(parameter,parameter2): a=4+parameter return a * 5 - parameter2 print fuggveny(-4,0)
●
Nem kötelező értéket visszaadani (return elhagyható)
# -*- coding: UTF-8 -*from math import * # eleg lenne az sqrt is def kerulet(a,b,c): return a+b+c def terulet(a,b,c): s = kerulet(a,b,c)/2 return sqrt(s*(s-a)*(s-b)*(s-c)) x = float(raw_input("a: ")) y = float(raw_input("b: ")) z = float(raw_input("c: ")) print "Kerület: ",round(kerulet(x,y,z),2) print "Terület: ",round(terulet(x,y,z),2)
Python I. ●
Osztály class Osztalyom: "Egy egyszeru pelda osztaly" i = 12345 def f(self): return 'hello vilag'
●
Példányosítás nélkül is lehet az elemeire hivatkozni print Osztalyom.i print Osztalyom.f()
Python I. ●
Osztály def f(self):
●
A self név nem speciális! (Csak szokás. Tartsuk meg.) A saját objektumunkat jelenti, amit automatikusan átpasszol a py interpreter. Viszont fogadni nekünk kell.
●
Példányosítás:
●
o=Osztalyom() print o.i print o.f()
Python I. ● ● ●
● ●
Kivételek Mi a helyzet a hibákkal? Pl. >>> 3 + 'a' → TypeError >>> 5/0 → ZeroDivisionError >>> nemletezovaltozo → NameError >>> a=[237,11]; a[3] → IndexError stb. Hiba esetén kivétel keletkezik Alaphelyzetben a script futása megszakad és a kivétel jelzésre kerül
Python I. ● ●
Kivételek Hogyan kapjuk el ezeket? try – except try: valamiamikiveteltdobhat()
except: print 'kivetelt dobott' ●
Lehet saját kivételünk is, és dobhatunk magunk is kivételt.