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, drugielement ] [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 = { a : 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 zip( left, right ) ) dist **=0.5 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 == main : 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