Python

advertisement
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
Download