Współczesne Narzędzia Obliczeniowe - Python mgr. inż. M. Czubenko Politechnika Gdańska Wydział Elektroniki Telekomunikacji i Informatyki Katedra Systemów Decyzyjnych 7 maja 2012
Podstawy podstaw Co to jest Python? Krótka historia następca języka ABC (1989) nazwa pochodzi od latającego cyrku do wersji 1.2 wydawany przez CWI (Centrum Matematyki i Informatyki w Amsterdamie) na licencji GPL 1.6.1 i od 2.0 Python Software Foundation
Podstawy podstaw Pythona aktualnie Wersje: 2.7.3 - wsparcie wersji 2.x 3.2.3 - aktualna rozwojowa IronPython (.Net) Jython (Java) PyPy (JIT) Stackless Python (c)
Podstawy podstaw Jak instalować Pythona? Systemy Windows - wininstaller Linux - repozytoria MacOS - installer
Podstawy podstaw Pythona IDE Anjuta (unix) eric python IDE (niezależny) geany (niezależny) Boa Constructor Komodo IDE (cross) MonoDevelop (cross) PIDA (cross) Spyder (Win/Linux/OS X) PyDev (eclipse plugin) PsVisual (win) SPE (niezależny) Wing (Win/Linux/OS X)
Podstawy podstaw Co to jest Python? Filozofia wielo-paradygmatowy obiektowy funkcyjny strukturalny typy dynamiczne garbage collector przenośność - interpreter brak enkapsulacji prawie wszystko jest obiektem
Programowanie Ogólnie o programowaniu... Paradygmat strukturalny hierarchiczne dzielenie na bloki omijanie skoków (goto, break, continue, switch) większość języków język stricte strukturalny - Pascal
Programowanie Ogólnie o programowaniu... Paradygmat funkcyjny funkcje to wartości podstawowe nacisk na wartościowanie dla danych wejść funkcja zwraca to samo wyjście oparte o rachunek lambda np. List, Scheme, F#
Programowanie Ogólnie o programowaniu... Paradygmat obiektowy programy to obiekty abstrakcyjność hermetyzacja polimorfizm dziedziczenie
Typy i operacje Przykładowy prosty kod def nwd ( a, b ) : w h i l e b : a, b = b, a%b r e t u r n a
Typy i operacje Typy logiczne bool : True lub False null : None wszystko jest prawdą oprócz: 0, 0.0, 0j;, (), [], { };
Typy i operacje Typy liczbowe całkowite: int (long w Python 2.x) 4591 zmiennoprzecinkowe: float 4.591 zespolone: complex 45.91+4.89j Uwaga typy są automatycznie przedłużane - nie występuje przepełnienie typu; complex zawsze w formacie a+bj np. 2+1j, a nie 2+j;
Typy i operacje Operacje na typach liczbowych zapytanie typu: type() arytmetyczne proste: +; -; *; / arytmetyczne złożone: %; //; ** logiczne : ==;!=; <; >; <=; >= konwersje : int(); complex(); float()
Typy i operacje Napisy - łańcuchy znaków Unicode: str Napis (Py 3.x) unicode u Napis (Py 2.x) ASCII: bytes b Napis (Py 3.x) str Napis (Py 2.x)
Typy i operacje Napisy - łańcuchy znaków Unicode: str (Py 3.x) Napis "Napis" unicode (Py 2.x) u Napis u"napis" ASCII: bytes (Py 3.x) b Napis b"napis" str (Py 2.x) Napis "Napis" Uwaga wielowierszowe w potrójnych lub znaku specjalne Unicode działają \n do momentu r napis wyświetlanie liczb: str(7) repr(9.4)
Typy i operacje Kolekcje lista (zmienna): [4.0, string, True] krotka (niezmienna): (4.0, string, True) zbiór (zmienny): {4.0, string, True} słownik (zmienny): { key1 : 1.0, 3: False}
Instrukcje If i f warunek : b l o k i n s t r u k c j i e l i f warunek : b l o k i n s t r u k c j i e l s e : b l o k i n s t r u k c j i
Instrukcje While w h i l e warunek : b l o k i n s t r u k c j i ( 1 ) continue e l s e : b l o k i n s t r u k c j i ( 2 )
Instrukcje For f o r zmienna i n l i s t a : b l o k i n s t r u k c j i ( 1 ) e l s e : b l o k i n s t r u k c j i ( 2 )
Instrukcje Funkcje def s i l n i a ( n ) : p r i n t n=, n i f n > 1 : r e t u r n n s i l n i a ( n 1) e l s e : p r i n t k o n i e c r e t u r n 1
Instrukcje zaawansowane String - przydatne funkcje n a p i s = Napis k t o r y l e c i s o b i e d a l e j t a b l i c a = n a p i s. s p l i t ( ) n a p i s 2 = Poczatek n a p i s u. j o i n ( i )
Instrukcje zaawansowane String - formatowanie Formatowanie krotki napisów n a p i s = Napis k t o r y l e c i n a p i s 2 = s o b i e d a l e j %s=%s % ( n a p i s, n a p i s 2 ) Standardowe wypisanie n a p i s = Napis k t o r y l e c i n a p i s 2 = s o b i e d a l e j i = 16 p r i n t ( n a p i s + n a p i s 2 + s t r ( i ) ) p r i n t ( 2+1=,2+1) p r i n t ( i h 5)
Instrukcje zaawansowane Standardowe wejście p r i n t ( H a l t! ) u s e r i n p u t = i n p u t ( Who Goes t h e r e? ) p r i n t ( You may pass, + u s e r i n p u t )
Instrukcje zaawansowane Operacje na listach l i s t a = [ b l e, 667, f u j ] l i s t a. i n d e x ( b l e ) l i s t a [ 2 ] l i s t a [ 1 : 2 ] l i s t a. i n s t e r t ( 1, abc ) l i s t a. append ( s t h ) l i s t a. e x t e n d ( [ cde, 5 5 6 ] ) l i s t a. r e v e r s e ( ) l i s t a. s o r t ( ) l e n ( l i s t a )
Instrukcje zaawansowane Operacje na listach cd... l i s t a = [ b l e, 667, f u j,778, p s i k ] l i s t a [ 1] l i s t a [ 0 : 4 ] l i s t a [0: 1] l i s t a [ 1 : ] l i s t a [ : 2 ] l i s t a. append ( [ cde, 5 5 6 ] ) l i s t a. e x t e n d ( [ cde, 5 5 6 ] )
Instrukcje zaawansowane Operacje na listach cd... l i s t a = [ b l e, 667, f u j,778, p s i k ] b l e i n l i s t a l i s t a. remove ( b l e ) l i s t a. pop ( ) l i s t a 2 = [ p o s z e d l, s o b i e, 5 54] l i s t a 3 = l i s t a +l i s t a 2 l i s t a 3+= l i s t a 2 l i s t a 3 = [ que, qua ] 2
Instrukcje zaawansowane Operacje na krotkach k r o t k a = ( b l e, 667, f u j,778, p s i k ) k r o t k a. i n d e x ( f u j ) f u j i n k r o t k a Po co są krotki? do iteracji (szybsze niż listy) zabezpieczenie przed zapisem jako klucz w słowniku (w przeciwieństwie do list) do formatowania tekstu
Instrukcje zaawansowane Operacje na słownikach s l o w n i k = { b l e : f u j, p s i k : 6 6 7, f u j : b l e } s l o w n i k [ b l e ] s l o w n i k [ p s i k ]= p o s z e d l d e l s l o w n i k [ p s i k ] s l o w n i k. c l e a r ( ) s l o w n i k. k e y s ( ) s l o w n i k. v a l u e s ( ) s l o w n i k. i t e m s ( )
Instrukcje zaawansowane Zmienne, trochę ciekawostek ( x, y, z )=(1,2,3) range ( 1 3 ) ( NIE,MOZE,TAK)= range ( 3 )
Instrukcje zaawansowane Wyrażenia listowe l i s t a = [ 1, 2, 5, 9 ] [ e l 2 f o r e l i n l i s t a ]
Instrukcje zaawansowane Filtracja list l i s t = [ a, p a r s z y w i e c, dobry, z l y, b r z y d k i, d o l a r, w i e [ e l f o r e l i n l i s t i f l e n ( e l ) >0] [ e l f o r e l i n l i s t i f e l!= b r z y d k i ] [ e l f o r e l i n l i s t i f l i s t. count ( e l )==0]
Dalsze elementy Pythona Wyjątki t r y : k=7 p r i n t ( k ) k+ cos except : p r i n t ( w y j a t e k ) e l s e : f i n a l l y :
Dalsze elementy Pythona Wyjątki - łapanie except T: except (T1, T2 ) : except T as v : r a i s e
Dalsze elementy Pythona Wyjątki - typy A s s e r t i o n E r r o r EOFError I O E r r o r S y n t a x E r r o r I m p o r t E r r o r KeyError F l o a t i n P o i n t E r r o r I n d e x E r r o r TypeError V a l u e E r r o r Z e r o D i v i s i o n E r r o r
Dalsze elementy Pythona Wejście - wyjście i n p u t ( ) s y s. s t d i n p r i n t ( ) s y s. s t d o u t
Dalsze elementy Pythona Moduły from MODUL import KLASA from s y s import s t d i n
Dalsze elementy Pythona Pliki open ( ) r e a d ( ) r e a d l i n e ( ) r e a d l i n e s ( ) w r i t e ( ) c l o s e ( )
Dalsze elementy Pythona Przydatne polecenia Kodowanie Pythona # c o d i n g : u t f 8 ord ( a ) c h r ( 9 7 ) ord ( u a ) u n i c h r (378) t y p e (234) l i s t = [ ] d i r ( l i s t ) g e t a t t r ( l i s t, pop )
Dalsze elementy Pythona Przydatne polecenia cd... enumerate ( l i s t a ) z i p ( l i s t 1, l i s t 2,... )
Dalsze elementy Pythona Definicja funkcji def nazwa ( a r g s ) : Opis f u n k c j i w p l i k u nazwa. d o c c i a l o ;
Dalsze elementy Pythona Troszkę o funkcjach Funkcja w Pythonie brak typów argumentów niemożliwość przeciążania funkcji standardowe określanie wartości nazwa=wartosc * - rozszerzenie ostatniego argumentu do postaci tablicy **- rozszerzenie ostatniego argumentu do postaci słownika return x
Dalsze elementy Pythona Funkcje anonimowe g = lambda x : g ( 3 ) x 2
Dalsze elementy Pythona Moduł import m m. f u n k c j a from m import ; f u n k c j a
Charakterystyka ponad 200 modułów pełna lista: http://docs.python.org/py3k/py-modindex.html
Charakterystyka Najpopularniejsze moduły: time sys os math random pickle urllib re cgi socket
Systemowe Moduł time gmtime ( 0 ) l o c a l t i m e ( ) # j a k o k r o t k a time ( ) # w sekundach c l o c k ( ) # zwraca c z a s p r o c e s o r a ctime ( ) # k o n w e r s j a sekund na s t r i n g a mktime ( ) # k r o t k a na sekundy s l e e p ( ) s t r p t i m e ( 30 Nov 00, %d %b %y ) s t r f t i m e ( %a, %d %b %Y %H:%M:%S +0000, gmtime ( ) )
Systemowe Moduł sys a r g v # argumenty z l i n i i p o l e c e n e x i t ( r e s u l t ) # konczy program path # l i s t a katalogow p o d c z e p i o n y c h do Py v e r s i o n s t d i n s t d o u t s t d e r r g e t s i z e o f ( o b j e c t ) # w b a j t a c h p l a t f o r m g e t w i n d o w s v e r s i o n ( ) # t y l k o w Windzie modules # zaladowane moduly
Systemowe Moduł locale g e t l o c a l e ( ) g e t p r e f f e r e d e n c o d i n g ( l o c a l e ) s e t l o c a l e ( ) r e s e t l o c a l e ( )
Systemowe Moduł os identyfikacja e n v i r o n # zmienne systemowe e n v i r o n [ HOME ] g e t g i d ( ) g e t g r o u p s ( ) g e t e u i d ( ) g e t l o g i n ( ) g e t p i d ( ) # a n a l o g i c z n i e s e t uname ( )
Systemowe Moduł os pliki open ( p l i k ) # o t w i e r a p l i k c l o s e ( p l i k ) # zamyka p l i k r o z n e od p o l e c e n os. # P o l e c e n i a os. open ( p l i k, f l a g i ) # zwraca f i l e d e s c r i p t o r c l o s e ( f d ) c l o s e r a n g e ( fd min, fd max ) d e v i c e e n c o d i n g ( f d ) dup ( f d ) fchmod ( fd, mode ) fchown ( fd, uid, g i d ) f s t a t ( f d ) f s y n c ( f d ) # p i s a n i e po p l i k u r e a d ( fd, b y t e s ) w r i t e ( fd, s t r )
Systemowe Moduł os katalogi c h d i r ( path ) f c h d i r ( f d ) getcwd ( ) # c u r r e n t working d i r e c t o r y chmod ( paty, mode ) chown ( path, uid, g i d ) mkdev ( major, minor ) mkdir ( ) remove ( path ) rename ( s r c, d s t ) r m d i r ( path ) s t a t ( path )
Systemowe Moduł os procesy e x e c l ( path, arg0,... ) e x e c v ( path, a r g s ) # p r o c e s w m i e j s c u obecnego spawnl ( mode, path, arg0,... ) spawnv ( mode, path, a r t g s ) # nowy p r o c e s u e x i t ( n ) f o r k ( ) k i l l ( pid, s i g ) system ( cammand ) t i m e s ( ) # zwraca p i e c r o z n y c h czasow w a i t ( )
Math Moduł array lista zajmująca mniej pamięci dopuszczalne typy: b, B (char), u, h, H (short), i, I, l, L, f, d a r r a y ( l, [ 1, 2, 3, 4 ] ) i t e m s i z e append ( x ) e x t e n d ( i e t a r b l e ) count ( x ) # z l i c z a i l o s c w y s t a p i e n i n d e x ( x ) i n s e r t ( i, x ) pop ( [ i ] ) remove ( x ) r e v e r s e ( ) to ( ) ; from ( ) # bytes, f i l e, l i s t, s t r i n g, u n i c o d e
Math Moduł math c e i l ( x ) c o p y s i g n ( x, y ) # from y to x f a b s ( x ) f l o o d ( x ) fmod ( x, y ) # modulo z b i b l i o t e k i C f a c t o r i a l ( x ) f r e x p ( x ) # zamiana na format w y k l a d n i c z y fsum ( i t e r a b l e ) suma l i c z b ## d l a r o z r o z n i e n i a od sum ( i t ) co zwraca p o l a c z o n a i s i n f i n i t e ( x ) i s n a n ( x ) l d e x p ( x, i ) zwraca x 2ˆ i
Math Moduł math exp ( x ) expm1 ( x ) # zwraca ( e ˆx) 1 l o g ( x, base ) l o g 1 p ( x ) # l n ( x+1) l o g 1 0 ( x ) pow ( x, y ) s q r t ( x )
Math Moduł math d e g r e e s ( x ) r a d i a n s ( x ) gamma( x ) lgamma ( x ) # zwraca l n z gamma( x )
Math Moduł random s e e d ( [ x ] ) r a n d r a n g e ( s t a r t, stop, s t e p ) r a n d i n t ( a, b ) c h o i c e ( seq ) s h u f f l e ( seq ) sample ( p o p u l a t i o n, k ) random ( ) b a t a v a r i a t e ( alpha, betha ) e x p o v a r i a t e ( lambd ) gammavariate ( alpha, beta ) g a u s s (mu, sigma ) #s z y b s z e n o r m a l v a r i a t e (mu, sigma ) p a r e t o v a r i a t e ( a l p h a )
Math Moduł cmath phase (com ) p o l a r (com ) r e c t ( r, p h i ) exp (com) l o g (com) l o g 1 0 ( com) s q r t (com)
Math Moduł fractions F r a c t i o n (num, denum ) F r a c t i o n ( f l o a t ) F r a c t i o n ( dec ) F r a c t i o n ( s t r ) l i m i t d e n o m i n a t o r (max )
Parsery Parsery plików xml html configparser argparser
Parsery Bazy danych dbm sqlite3
Parsery Formatowanie stringów string re
Parsery Moduł string - constants a s c i i l e t t e r s a s c i i l o w e r c a s e a s c i i u p p e r c a s e d i g i t s h e x d i g i t s w h i t e s p a c e
Parsery Moduł string - Formatter format ( s t r i n g, args, kwargs ) r e p l a c e m e n t f i e l d ::= { [ f i e l d n a m e ] [! c o n v e r s i o n ] [ : f o r m a t s p e c ] } f i e l d n a m e ::= arg name (. a t t r i b u t e n a m e [ e l e m e n t i n d e x ] ) arg name ::= [ i d e n t i f i e r i n t e g e r ] a t t r i b u t e n a m e ::= i d e n t i f i e r e l e m e n t i n d e x ::= i n t e g e r i n d e x s t r i n g i n d e x s t r i n g ::= <any s o u r c e c h a r a c t e r except ] > + c o n v e r s i o n ::= r s a f o r m a t s p e c ::= <d e s c r i b e d i n the n e x t s e c t i o n >
Parsery Moduł string - Formatter mini language f o r m a t s p e c ::= [ [ f i l l ] a l i g n ] [ s i g n ] [#] [ 0 ] [ width ] [, ]... [. p r e c i s i o n ] [ t y p e ] f i l l ::= <a c h a r a c t e r o t h e r than } > a l i g n ::= < > = ˆ s i g n ::= + width ::= i n t e g e r p r e c i s i o n ::= i n t e g e r t y p e ::= b c d e E f F.. g G n o s x X %
Parsery Moduł string - Formatter przykłady >>> {0}, {1}, {2}. format ( a, b, c ) a, b, c >>> {}, {}, {}. format ( a, b, c ) # 3.1+ o n l y a, b, c >>> {2}, {1}, {0}. format ( a, b, c ) c, b, a >>> {2}, {1}, {0}. format ( abc ) c, b, a >>> {0}{1}{0}. format ( abra, cad ) a b r a c a d a b r a >>> r e p r ( ) shows q u o t e s : {! r } ; s t r ( ) doesn t : {! s }.... format ( t e s t 1, t e s t 2 ) r e p r ( ) shows q u o t e s : t e s t 1 ; s t r ( ) doesn t : t e s t 2
Parsery Moduł string - Formatter przykłady >>> width = 5 >>> f o r num i n range ( 5, 1 2 ) :... f o r base i n dxob :... p r i n t ( { 0 : { width }{ base }}. format (num, base=base,... p r i n t ( )
Inne Moduły sieciowe ebbrowser http urllib telnetlib ssl socket smtpd, smtplib, poplib, mailbox, imaplib, email ftplib cgi, cgitb
Inne Moduły narzędziowe Pakery zlib, gzip bz2 zipfile tarfile
Inne Moduły narzędziowe Programowanie współbieżne threading multiprocessing subprocess
Inne Moduły narzędziowe Różne wave unittest timeit pomiar czasu wykonywania programów curses, tkinter gui