Vincze Dávid Miskolci Egyetem, IIT vincze.david@iit.uni-miskolc.hu http://users.iit.uni-miskolc.hu/~vinczed/
Á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/
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...
Hi World! >>> 'Hello World!' 'Hello World!' >>> print "Hello World!" Hello World! Látjuk a különbséget?
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"
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'
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!
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'
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'}
Frozenset, mint az előbb 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ó bytearray([66, 67, 68]) bytearray(b'bcd') Set: s={5, 9.9, 'beton'} 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'}
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.
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 -*-
Típuskonverzió int(), float(), str() vagy grave-accent `i` i=303 print str(i) " - " `i` Komment # bla bla
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.
Vezérlési szerkezetek if akarmi:... elif akarmi2: else:......
Vezérlési szerkezetek if i>0: elif i<0: print 'pozitiv' else: print 'negativ' print 'nulla'
Vezérlési szerkezetek for x in lista: Lista elemei kerülnek x-be for x in tuple: Tuple elemei kerülnek x-be for x in sztring: String karakterei kerülnek x-be Szekvencia generálás listaként: range() fgv. range(5) [0, 1, 2, 3, 4]
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
Objektum objnev.metodusev() objnev.adattag Minden objektum. Természetesen definiálhatunk saját osztályokat.
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'
Modulok import modulnev pl. import sys, os, base64 Olvassunk be valamit a konzolról!
Modulok >>> import sys >>> sys.stdin.readline() beton 'beton\n' >>> from sys import * >>> stdin.readline() >>> raw_input('kerek szoveget: ') kerek szoveget: beton 'beton'
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)
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()
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()
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
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.