Plan Przegląd podstawowych typów i konstrukcji języka interpreter i ’witaj świecie’ struktura kodu, wcięcia zakresy widoczności zmiennych typy proste, int, float, konwersje podstawowe instrukcje Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 1 / 28 Plan Przegląd podstawowych typów i konstrukcji języka przegląd kolekcji wybrane wbudowane funkcje języka generator expression sortowanie kolekcji, funkcje lambda pakiet random klasy, funkcje - podstawy moduły i paczki Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 2 / 28 interpreter interpreter pozwala na wykonanie dowolnego programu/funkcji w szczególności szybko dostępny i potężny kalkulator historia poleceń jest dostępna z wykorzystaniem strzałek (↑↓) interaktywne przeszukiwanie Ctrl-R auto-uzupełnianie Tab Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 3 / 28 ’witaj świecie’ każdy skrypt z rozszerzeniem .py jest modułem po dodaniu możliwości wykonywania i dopisaniu domyślnego interpretera pythona jako domyślnego programu uruchamiającego skrypt, moduł zachowuje się jak samodzielny program można ustawić dla skryptu domyślne kodowanie na utf8 witaj świecie #!/usr/bin/python # -*- coding: utf-8 -*print ’witaj świecie :)’ Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 4 / 28 struktura kodu, wcięcia zagnieżdżanie kodu odbywa się w prosty sposób, poprzez wcięcie kodu o stałą ilość spacji #!/usr/bin/python # -*- coding: utf-8 -*class Wciecie(object): def __init__(self): """ wciecie w naturalny sposób strukturyzuje kod i eliminuje zbędne klamrowe ogony } } } """ self.string = "perfect indentation" def __str__(self): return self.string print str(Wciecie()) Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 5 / 28 zakresy widoczności zmiennych #!/usr/bin/python # -*- coding: utf-8 -*class Scope(object): class_var = 4. # class def __init__(self): print globals() # prints global scope self.object_var = [] for i in xrange( int(Scope.class_var) ): self.object_var.append( global_module_var )#global self.object_var.append( Scope.class_var )#class local_function_var = i # local # local function var is visible outside loop’s scope print dir() # print closest relevant scope self.object_var.append( local_function_var ) global_module_var = ’module’ # global print Scope().object_var Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 6 / 28 typy proste, konwersje 1 int nieograniczony zakres int( x ) 2 float float( x ) 3 napisy ’napis’ albo ”to również jest napis” sekwencja/lista znaków napisy nie mogą mutować, zawsze tworzony jest nowy obiekt str( x ) - obiekty przekształcane są z wykorzystaniem ich wewnętrznej funkcji str , jeśli mają ją zaimplementowaną Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 7 / 28 podstawowe instrukcje pętle while True: pass for i in xrange( size ): pass if if test_a: case_a() elif test_b: case_b() else: last_case() obsługa wyjątków try moja_funkcja( arg ): fajnie( ) except StrasznyBladError: nie_fajnie( ) Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 8 / 28 przegląd kolekcji zawartość kolekcji Kolekcje Pythona mogą zawierać wszystko, typy proste, obiekty, inne kolekcje, funkcje, klasy, metody klas, moduły ... nie ma ograniczeń jeżeli chodzi o ilość poziomów zagnieżdżenia a in collection - True jeśli a znajduje się w kolekcji a not in collection - True jeśli a nie znajduje się w kolekcji Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 9 / 28 przegląd kolekcji tuple stałe, niezmienne wyliczenie a = () - puste wyliczenie, raczej nieprzydatne a = ( 4, ’drugi element’ ) b = 456, Class(), ’maly napis’, 56. tuple( kolekcja ) indeksowane od 0, ’działają’ slice’y a[0] − 4 b[1 :: 2] - Class(), 56. b[1 : −1] - Class(), ’maly napis’ Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 10 / 28 przegląd kolekcji listy mutowalne, iterowalne, indeksowalne indeksowane od 0, slice’y a = [] - pusta lista [4,0 drugielement 0 ] [a, b, [inna, lista] list( kolekcja ) list.append( AnotherElem() ) list.extend( another list ) del[0], my list.remove( ’element’ ) - usuwanie elementu, usuwanie pierwszego wystąpienia ’element’ odpakowanie listy ∗lista Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 11 / 28 przegląd kolekcji napisy napisy można traktować jak tuple znaków napisy są ’niezmienne’ a = ’ala ma kota’, a[2 : 8] - ’a ma k’ str( x ) - konwertuje x do napisu konkatenacja ’+’, jeżeli jeden z operandów nie jest napisem to konieczne jest jawne wywołanie konwersji istnieje bardzo dużo przydatnych funkcji operujących na napisach, np. split(), strip() Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 12 / 28 przegląd kolekcji słowniki słownik par klucz, wartość a = {} a = {0 a0 : 456, 676 : [1, 2, 3], {} : (2, 4)} a[key ] = value - wstawianie del[key ] - usuwanie for key, val in a.iteritems(): - iteracja po parach słownika odpakowanie słownika ∗ ∗ slownik set nieposortowany zbiór unikatów input = [1, 1, 5, 77] set( input ) - 1,5,77 Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 13 / 28 wybrane wbudowane funkcje języka dokumentacja Python 2.6, Built-in Functions http://docs.python.org/library/functions.html chr( x ), ord( x ) - konwersja ASCII => int i na odwrót cmp( x, y ) - komparator zwraca liczbę ujemną jeśli x < y , dodatnią jeśli x > y i 0 jeśli x jest równe y complex(), liczby zespolone enumerate( iterable ) - wyliczenie, iterator par ( pozycja, element kolekcji ) dict(iterable), list(iterable), set(iterable), tuple( iterable) - budują żądaną kolekcję przy użyciu innej kolekcji help( x ) - wypisuje wbudowaną pomoc systemu dotycząca danego obiektu id( x ), type( x ), identyfikator i typ obiektu len( x ) , zwraca rozmiar obiektu Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 14 / 28 generator liczb pseudolosowych Generator zawarty jest w pakiecie random przydatne funkcje z pakietu random random - następny pseudolosowy float sample( pop, k ) - losuje podzbiór o rozmiarze k z populacji pop gauss( mu, sigma ) - rozkład Gaussa shuffle( x ) - miesza sekwencję x w miejscu randint( a, b ) - losowy int z przedziału < a, b > Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 15 / 28 sortowanie kolekcji, funkcje lambda sortowanie sorted( iterable, cmp=None, key=None, reverse=False ) - kolekcja, komparator, funkcja definiująca klucz do porównania której argumentem jest element kolekcji, porządek sortowania ciekawe HOWTO o sortowaniu http://wiki.python.org/moin/HowTo/Sorting funkcje lambda przydatne małe, jednoliniowe funkcje a = 4,5,7 func = lambda left, right : left[0]* right[2] + left[1]*right[1] + right[0]*left[2] func( a, a ) mają zaniknąc w Pythonie 3.x Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 16 / 28 ćwiczenie sortowanie Spośród wszystkich metod obiektu typu list wybrać i posortować alfabetycznie/(względem długości) takie których nazwa jest dłuższa niż 6 znaków. Polecenie dir( obj/class/func ) zwraca całą wewnętrzną przestrzeń nazw argumentu. Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 17 / 28 sortowanie, funkcje lambda #!/usr/bin/python # -*- coding: utf-8 -*# posortować słowa po ilości znaków w odwrotnej kolejności with open(’../lorem.txt’) as f: lines = f.readlines() all_words = [] for line in lines: for word in line[:-1].split(): all_words.append( (word, len(word)) ) #odwrócenie sortowania dict_sorted_all_words = sorted( all_words, reverse=True ) # z użyciem lambdy len_sorted_all_words = sorted( all_words, lambda x, y: cmp( x[1], y[1] ), reverse = True ) # bez użycia lambdy from operator import itemgetter len_sorted_all_words = sorted( all_words, key=itemgetter(1), reverse = True Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 18 / 28 wybrane wbudowane funkcje języka min(), max(), sum() map( function, iterable ), wykonuje funkcję dla każdego elementu kolekcji filter( function, iterable ), zwraca listę elementów z kolekcji dla których funkcja zwróciła prawdę open() - podstawowa funkcja I /O range([start],stop,[step]), xrange( jw. ) - funkcje zwracające listę liczb w zadanym zakresie( xrange jest szybsza, nie generuje bowiem listy, tylko specjalny obiekt xrange/iterator) raw input() - czyta ze standardowego wejścia Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 19 / 28 wybrane wbudowane funkcje języka round() - zaokrąglanie getattr(), setattr() - pobieranie i ustawianie nazwanych atrybutów obiektów reversed() - odwrócony iterator sorted() sortowanie kolekcji slice( [start], stop, [step]) - podzbiór kolekcji, równoważne obj[a:b:c] Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 20 / 28 generator expression #!/usr/bin/python # -*- coding: utf-8 -*""" odległość 2 punktów w przestrzeni """ dim = 17 left = [ i for i in xrange( dim ) ] right = [ (-i if i<dim/2 else i**3 ) for i in reversed( left ) ] dist = sum( (x-y)**2 for x, y in dist **=0.5 zip( left, right ) ) print ’distance = ’, dist Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 21 / 28 klasy, funkcje klasy class Example(inheritance): " class docstring " def __init__(self, arg1, argN ): """ docstring for constructor, self - binding to the given object of Example class, it also defines the data scope """ self.var1 = arg1 self.method( argN, self.var1 ) Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 22 / 28 klasy, funkcje funkcje, metody #!/usr/bin/python # -*- coding: utf-8 -*def module_function( string, value = 4): """ parameter may have default value""" return str(value) + ’, ’ + string class Simple(): """ docstring """ def __init__(self, param): """ docstring """ self.method( param ) def method( self, param ): """ self is passed, by convention, as the first arg to all class methods """ first = module_function( ’first’ ) second = module_function( ’second’ , value=’not int is ok t print first, ’;’, second simple = Simple(’param’) Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 23 / 28 klasy, funkcje funkcje, metody args_list = [ 1,2,3 ] kwargs_dict = { ’left’:5, ’right’:6 } def kwarg_func( left, right=768 ): print left, right, ’\n’ ’’’ slownik moze dostarczac argumentow ’keywords’ po odpakowaniu’’’ kwarg_func( **kwargs_dict ) def func( normal_arg, *args, **kwargs): # zmienna liczba parametrow print ’zwykly argument - moze wystapic 0 lub wiecej,’, normal_arg print ’lista argumentow,’, args print ’slownik parametrow,’, kwargs print func( ’jestem pierwszy’, *args_list, **kwargs_dict ) ’’’ np izip(*iterables) z itertools wymaga ’rozpakowanej listy parametrow’’ from itertools import izip iter_list = [ xrange(10) for i in xrange(5) ] print list( izip(*iter_list) ) Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 24 / 28 klasy, funkcje funkcje, metody #!/usr/bin/python # -*- coding: utf-8 -*’’’ funkcje mogą zwracać więcej niż jedną wartość - jako tuple ’’’ def bizarre( a, b ): return a, {a:b}, b, [ b+a for k in xrange(1000) ] ’’’ wynikiem jest tuple ’’’ arg1, slownik, arg2, dluga_lista = bizarre( 5, 67 ) Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 25 / 28 ćwiczenie szyfr Cezara Zaimplementuj szyfr Cezara - translacja każdej litery alfabetu na inną oddaloną o stałą liczbę pozycji. Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 26 / 28 moduły i paczki moduły każdy skrypt z rozszerzeniem .py jest modułem po dodaniu możliwości wykonywania i dopisaniu domyślnego interpretera pythona jako domyślnego programu uruchamiającego skrypt, moduł zachowuje się jak samodzielny program można ustawić dla skryptu domyślne kodowanie na utf8 jeżali do skryptu dodamy instrukcję if name ==0 main 0 : blok ten, nie zostanie wykonany podczas importu modułu, a jedynie wówczas gdy moduł zostanie uruchomiony jako samodzielny skrypt wczytanie modułu odbywa się poprzez polecenie import można załadować wybrane elementy z przestrzeni nazw modułu from mod import klasa, pole Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 27 / 28 moduły i paczki paczki moduły mozna organizować w paczki każdy katalog zawierający pliki .py, staje się paczką jeśli umieścimy w nim pusty plik init .py Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Podstawy Pythona - wprowadzenie 22 lutego 2011 28 / 28