• Nie Znaleziono Wyników

PYTHON – PODSTAWY I STRUKTURY DANYCH

N/A
N/A
Protected

Academic year: 2021

Share "PYTHON – PODSTAWY I STRUKTURY DANYCH"

Copied!
80
0
0

Pełen tekst

(1)

PYTHON – PODSTAWY I STRUKTURY DANYCH

Instalacja

Środowisko, struktura, zastosowania, historia Typy danych i ich konwersja

Liczby Łańcuchy Listy

Krotki

Słowniki

Zbiory

(2)

Instalacja Pythona

Strony z plikami instalacyjnymi:

http://www.python.org/download/

Python 2.7 Windows installer

(Windows binary -- does not include source) Python 2.7 compressed source tarball

(for Linux, Unix or OS X) Moduły Pythona:

http://pypi.python.org/pypi/

Vpython:

http://vpython.org/

Django:

https://www.djangoproject.com/

(3)

Użyteczne linki

http://www.python.rk.edu.pl/ - polska strona poświęcona Pyrhonowi

http://effbot.org/ - duża ilość pomocy i modułów Pythona

Usenet comp.lang.python, comp.lang.python.announce, pl.comp.lang.python. Zobacz także serwer newsowy:

news.gmane.org

http://www.tutorialspoint.com/python/ - tutorial

http://www.hotscripts.com/category/scripts/python/ - skrypty

http://www.python-eggs.org/ - Python eggs

http://www.voidspace.org.uk/coollinks/python_links.shtml - linki

http://pygoogle.sourceforge.net/ - linki Google do Pythona

http://oreilly.com/python/ - książki O’Reilly ‘ego o Pythonie

http://www.cetus-links.org/oo_python.html - programowanie obiektowe w Pythonie

http://www.dmoz.org/Computers/Programming/Languages/Pyt

hon/ - dmoz

(4)

Instalacja modułów

WINDOWS

 1. Ściągnij „zzipowany” moduł

 2. Rozpakuj go do podkatalogu (powiedzmy C:\Rob)

 3. W trybie konsoli (cmd) przejdż do C:\Rob i uruchom

C:\Python26\python setup.py install LINUX

Wybierz instaluj automatycznie lub zastosuj

apt-get .

(5)

Zmienne środowiskowe Zmienne środowiskowe

Pliki *.pth

Skrypty systemowe

Zmienne środowiskowe Ustawienia modułu sys

Zmienna Opis

PYTHONPATH ścieżka wyszukiwania modułów (zob. sys.path)

PYTHONSTARTUP Program .exe wykonywany przed uruchomieniem trybu interaktywnego

PYTHONHOME W którym katalogu zainstalowano PYTHONa PYTHONINSPECT Interpreter będzie używał opcji -i

PYTHONUNBUFFERED Interpreter będzie używał opcji -u

PYTHONCASEOK Wskazuje nazwy modułów które PYTHON zaimportuje

(6)

Pola zastosowań Pythona

Obszar Narzędzia i rozszerzenia

Systemowe programowanie:

podtrzymywane dla narzędzi wszystkich poziomów

Gniazda sieciowe, procesy,

wielowątkowość, sygnały, RPC, katalogi, POSIX ....

GUI: różne narzędzia GUI Tkinter, wxPython, PyQt, PyGTK, Anygui, Swing, PythonCard, Dabo ...

Interface bazodanowy: interface dla

zarówno relacyjnych jak i obiektowych baz danych

MySQL, Oracle, Sybase, PostgreSQL, SQLite, ZODB, DBM, ...

Narzędzia Windows: dostęp do różnych narzędzi Windows

MFC wrapper, interface COM, skrypty ActiveX, ASP, Drivery Odbc, .NET, … Narzędzia sieciowe: gniazda, CGI,

narzędzia klienta i serwera, framework sieciowy, parsery, podtrzymywanie Apache, integracja z Javą

JYTHON, XML, email, ElementTree, htmllib, telnetlib, urllib, Zone, CherryPy, Twisted, Webware, Django, mod_python, SSL ...

Dystrybucja obiektów: SOAP web serwisy, XML-RPC, CORBA, DCOM

PySOAP, SOAPy, xmlrpclib, ILU, Fnorb, omniORB, PyWin32 ...

Inne popularne narzędzia: grafika, języki wizualizacji, matematyka, kryptografia, integracja, gry,

PIL, VPYTHON, Blender, PyOpenGL, NLTK, YAPPS, VTK, NumPy, PyCrypto, SWIG, ctypes, PyGame, MoinMoin ...

(7)

Struktura modułów Pythona

(8)

Zalety Pythona

Przenośność - każdym systemie operacyjnym Integracja- z wieloma platformami

Prostota. Łatwo pisać, kod jest czytelny

Możliwości. Ubogi standard i bogate biblioteki

Elastyczność. Łatwo jest zacząć i po kolei go rozszerzać.

Open-source. PYTHON jest językiem darmowym Parametry funkcji. - opcjnalne, listą lub słownikiem

Lambdy i elementy programowania funkcyjnego - proste funkcje Pętle i listy comprehensive - bardzo uniwersalne rozwiązania

Generatory. – mechanizm ewaluacji funkcji

Minijęzyk formatowania stringów – funkcje obsługi łańcuchów

(9)

Historia Pythona

 Pythona stworzył latach 90. Guido van Rossum

 G. V. Rossum - „Benevolent Dictator for Life”

(BDFL).

 Do wersji 2.0 Python był opracowywany w BeOpen potem PythonLabs przeniósł się do Digital Creations.

 Własność intelektualna począwszy od Pythona

2.1 (wraz z wersjami alpha i beta), jest

własnością Python Software Foundation (PSF),

niedochodowej organizacji wzorowanej na

Apache Software Foundation

(10)

Typy danych

Kategoria typu Nazwa typu Opis

None types.NoneType Obiekt None (null)

Liczby bool Boolean (True lub False)

int Liczba całkowita

long Długa liczba całkowita float Liczba zmiennoprzecinkowa complex Liczby zespolone

Zbiory set Zbiór niezmienny

frozenset Zbiór zmienny

Sekwencje str Łańcuch znaków

unicode Łańcuch znaków UNICODE

basestring Typ bazowych wszystkich łańcuchów znaków

list Lista

tuple Krotka

xrange Sekwencja niezmienna xrange

Odwzorowania dict Słownik

Pliki file Plik

Moduły types.ModuleType Moduł

Klasy object Rodzic wszystkich klas

(11)

Weryfikacja typu

 type(x) – określa typ obiektu x

 isinstance(x,y) –czy x jest instancją typu (obiektu) y

 id(x) –adres przechowywania w pamięci x

 coerce(x,y) – wyrównianie typów x i y

(tylko dla typów liczbowych)

(12)

Funkcje konwersji typów

Funkcja Konwersja

chr() int/ long/ float/ complex -> znak o kodzie ASCII

unichr() int/ long/ float/ complex -> znak UNICODE

complex() int/ long/ float/ string -> complex

ord() string -> kod ASCII znaku

float() int/long/ complex/ string -> float

int() float/ complex/ string -> int

str() wszystkie -> string

eval() oblicza string jeśli łańcuch jest zapisem wyrażenia algebraicznego

tuple() wszystkie -> krotka list() wszystkie -> lista long() int/float/ complex/ string -> long

(13)

Operacje na danych

liczbowych

(14)

Operacje na bitach i operacje logiczne

Operacja Wynik

x|y bitowa alternatywa x i y

x^y bitowa różnica symetryczna x i y

x&y bitowa koniunkcja x i y

x<<n przesunięcie bitowe x w lewo o n bitów x>>n przesunięcie bitowe o n bitów w prawo

~x uzupełnienie bitowe x

Operacja Wynik

x or y jeśli x jest fałszem to y w przeciwnym

przypadku x

x and y jeśli x jest fałszem to x, w

przeciwnym przypadku y

not x Jeśli x jest fałszem to True w

przeciwnym przypadku False

(15)

Operatory porównania

Operator Znaczenie

< mniejsze

<= mniejsze lub równe

> większe

>= większe lub równe

= = równe

!= różne

<> różne

is identyfikacja obiektu

is not zanegowanie identyfikacji

obiektu

(16)

Wycinanie sekwencji

(17)

Metody łańcuchów

Metody łańcuchów s.capitalize() Zamienia pierwszy znak (jak jest literą) na dużą litere

s.center(width [, pad]) Centruje łańcuch w obszarze o długości width wypełniając brakujące elementy znakami pad s.count(sub [,start [,end]]) Liczy ilość pojawień się podłańcucha sub w s

s.decode([encoding [,errors]]) dekoduje łańcuch i zwraca łańcuch Unicode s.encode([encoding [,errors]]) Zwraca zakodowaną wersję łańcucha s.endswith(suffix[,start [,end]]) Sprawdza koniec łańcucha dla przyrostka s.expandtabs([tabsize]) Zastępuje znaki tab przez spacje

s.find(sub [, start [,end]]) Znajduje pierwsze pojawienie się podłańcucha sub w łańcuchu s.index(sub [, start [,end]]) Znajduje pierwsze pojawienie się różmicy (błędu) między łańcuchami s.isalnum() Sprawdza czy wszystkie znaki są alfanumeryczne

s.isalpha() Sprawdza czy wszystkie znaki są literami s.isdigit() Sprawdza czy wszystkie znaki są cyframi

s.islower() Sprawdza czy wszystkie znaki są małymi literami s.isspace() Sprawdza czy wszystkie znaki są spacjami

s.istitle() Sprawdza czy łańcuch jest tytułem (zaczyna się od dużej litery) s.isupper() Sprawdza czy wszystkie znaki są dużymi literami

s.join(t) Łączy łańcuchy s i t

s.ljust(width [, fill]) Daje lewostronne wcięcie w s długości width.

s.lower() Zamienia litery na małe

s.lstrip([chrs]) Usuwa początkowe spacje

s.replace(old,new[,maxreplace]) Podłańcuch new zastępuje podłańcuch old w s s.rfind(sub [,start [,end]]) Znajduje ostatnie pojawienie się podłańcucha

s.rindex(sub [,start [,end]]) Znajduje miejsce ostatniego pojawienia się lub zwraca sygnalizację błędu s.rjust(width [, fill]) Prawostronne wyrównanie tekstu s w łańcuch długości width.

s.rsplit([sep [,maxsplit]]) Zamienia łańcuch na listę, sep jest znakiem, który dzieli łań- cuch na podłańcuchy, maxsplit to maksymalna liczba rozbić

s.rstrip([chrs]) Usuwa spacje z przodu i tyłu s.split([sep [,maxsplit]]) Tak jak split

s.splitlines([keepends]) Rozdziela łańcuch tak jak split gdy punktem rozdziału jest znak nowej linii s.startswith(prefix[,start

[,end]]) Sprawdza czy łańcuch zaczyna się od prefiksu prefix s.strip([chrs]) Usuwa wiodące i końcowe spacje lub znaki z chrs s.swapcase() Zamienia duże na małe litery i vice versa s.title() Zwraca wersję tytułową (z dużej litery)

s.translate(table[,deletechars]) Tłumaczy (zamienia) łańcuch używając tabeli zamiany, usuwa znaki deletechar

s.upper() Zamienia litery na duże

s.zill(width) wypełnia łańcuch zerami z lewej aż do określonej szerokości

(18)

Łańcuchy surowe i UNICODE

Znak sterujący

Interpretacja Znak

sterujący

Interpretacja

\ Kontynuacja w nowej linii \\ Kreska ukośna

\’ Pojedynczy apostrof \” Podwójny apostrof

\a Sygnał dźwiękowy \b Backspace

\e Escape \0 Null

\n Nowa linia \v Pozioma tabulacja

\t Pionowa tabulacja \r Powrót karetki

\000 Wartość ósemkowa (\000-\377) \uxxxx Znak unicode (\u0000-\uffff)

\Uxxxxxxxx Wartość Unicode (\U00000000-

\Uffffffff)

N\{Nazwa} Nazwa znaku Unicode

\xhh Wartość heksadecym.(\x00-\xff)

(19)

Formatowanie łańcuchów

Konwersja Znaczenie

d,i Liczba całkowita dziesiętna lub długa ze znakiem u Liczba dziesiętna bez znaku

o Liczba ósemkowa bez znaku całkowita lub długa

x Liczba szesnastkowa bez znaku (małe litery) lub długa X Liczba szesnastkowa bez znaku (wielkie litery) lub długa e,E Liczba zmiennoprzecinkowa w formacie wykładniczym

(małe ‘e’ lub duże ‘E’) „m.dddddde±xx” lub

„m.ddddddE±xx”1

f Liczba zmiennoprzecinkowa w formacie dziesiętnym

„m.dddddd”

g,G Zastosuj konwersję „e” jeśli wykładnik jest mniejszy niż -4 lub większy od wartości precyzji, w przeciwnym wypadku zastosuj „f”

c Pojedynczy znak (liczba całkowita lub napis jednoznakowy) r Napis (konwertuje dowolny obiekt z wykorzystaniem

funkcji repr())2

s Napis (konwertuje dowolny obiekt z wykorzystaniem funkcji str())3,4

\% Brak konwersji, wynik zawiera znak „%”.

(20)

Szablony tekstów

Formatowanie łańcucha

a=u”””Drogi Panie %(nazwisko)s, proszę zapłacić

%(kwota)3.2f zł. Andrzej Krajka””

print a % {’nazwisko’: ’Kowalski’,’kwota’:200.00}

 Inne formatowanie

import string

a = string.Template(u”Drogi Panie $nazwisko, proszę zapłacić

$kwota zł. Andrzej Krajka”””)

print a.substitute({’nazwisko’: ’Kowalski’,

’przedmiot’: ’blender’, ’kwota’: „%0.2f” %

50.0})

(21)

Listy – sekwencje mutowalne

nazwiska=[”Kowalski”, ”Janowski”,

„Nowak”]

lista=[0, 2.3e-5, ”Ola”, [”string”, 2.1-3j, True ]]

lista1=(1,[2,3],(3,4),(2,),{’a’:

(1,2),2:’b’}) def f1(x):

return x+x def f2(x):

return x*x;

a=[f1,f2]

a[0](5)

(22)

Operacje na sekwencjach mutowalnych

Funkcje sekwencji

min(s) Minimalna wartość w s

max(s) Maksymalna wartość w s

Operacje dostępne na sekwencjach mutowalnych (listy)

s[i]=v Podstawienie i-tego elementu

s[i:j]=t Podstawienie elementu/ciągu za podciąg

s[i:j:k]=t Podstawienie elementu/ciągu za podcią

del s[i] Usunięcie elementu

del s[i:j] Usunięcie elementu/podciągu

del s[i:j:k] Usunięcie elementu/podciągu

Metody sekwencji mutowalnych (listy)

s.remove(x) Usuwa pierwsze pojawienie się znaków x z s s.extend(t) Rozszerza listę s przez dodanie elementów t s.sort([cmpfunc [, keyf [, reverse]]])) Sortuje elementy listy (można ustawić jako

procedurę cmpfunc - sposób porównania - funkcję zwracającą liczbę ujemną, 0 lub dodatnią). Można również jako argument podać funkcję keyf, jest to funkcja zmieniająca każdy argument przed sortowaniem (tylko do sortowania) reverse jest bitem czy w zwykłej (0) czy odwrotnej kolejności s.reverse() Zwraca elementy listy w odwrotnej kolejności

list(s) Zamienia obiekt s w listę

s.append(x) Dodaje nowy element x na końcu s

s.count(x) Zlicza pojawienia się podłańcucha x w s

s.index(x [,start [,stop]]) Zwraca najmniejszy i taki, że s[i]= =x,. start i stop to opcjonalne zaznaczenie początku i końca

przeszukiwania łańcucha

s.insert(I,x) Wstawia x w miejscu o indeksie i.

s.pop([i]) Zwraca element i i usuwa go z listy, Jeśli i jest ominięty zwraca się ostatni element

(23)

Comprehensive list

a=[3,2-5J,-3.2]

c=[2*s for s in a]

d=[s for s in a if abs(s)>3.1]

e=[(x,y,z) for x in a for y in b

for z in d if

y<”c”]

(24)

Krotki – sekwencje niemutowalne

a,b,c=1,3,’u’

a,b,c=(1,3,’u’) krotka=(a,b,c)

(a) 3 (a,) (3,) krotka=()

krotka=1,2,[3,5]

krotka*=2

krotka=krotka[:2]+(0,)+krotka[3:]

(25)

Słowniki – dostęp przez klucz

macierz={(1,4):1, (2,5):3, (3,4):-2, (3,5):1}

i,j=3,2

macierz.get((i,j),0)

tekst_licz={tuple(’aeoiuy’):0,

tuple(’bcdfghjklmnprstwxz’):0,

tuple(’ąćęłńóśżź’):0, tuple(’.,:;’):0, tuple(’ (){}

[]/\=-+’):0}

(26)

Metody i atrybuty słowników

Operacja Użycie Działanie

clear dict.clear() nie zwraca wartości, usuwa wszystkie pary klucz:wartość} ze słownika dict.

copy dict.copy() zwraca dict, płytkie kopiowanie słownika

fromkeys dict.fromkeys(s[,v]) tworzy słownik dict z kluczami z s i wartościami równymi v.

get dict.get(k[,d]) zwraca dict[k] jeśli k jest indeksem w słowniku, w przeciwnym razie zwraca d.

has_key dict.has_key(klucz1) zwraca True jeśli klucz1 należy do słownika dict, w przeciwnym wypadku zwraca False.

items dict.items() zwraca listę elementów (klucz, wartość).

iteritems dict.iteritems() iterator nad elementami słownika dict.

iterkeys dict.iterkeys() iterator nad kluczami słownika dict.

itervalues dict.itervalues() iterator nad wartościami słownika dict.

keys dict.keys() zwraca listę kluczy

pop dict.pop(klucz[,błąd]) zwraca wartość elementu korespondującego z kluczem i usuwa go ze słownika, jeśli klucza nie ma w słowniku zwraca wartość błąd, a jeśli nie została podana „zwraca” błąd - KeyError.

popitem dict.popitem() zwraca parę (klucz, wartość) i usuwa ze słownika, a jeśli słownik jest pusty „zwraca” błąd –

KeyError

setdefault dict.setdefault(klucz,błąd) zwraca wartość elementu korespondującego z kluczem, jeśli klucza nie ma w słowniku zwraca wartość błąd i wstawia do słownika parę klucz:błąd

update dict.update(E[,**F]) nie zwraca wartości, aktualizuje {\tt Dict} parami klucz:wartość ze słowników podanych jako parametry.

values dict.values() zwraca listę wartości słownika

(27)

Zbiory

Metody i operacje dla typu set i frozenset

a.union(b) a|b suma zbiorów a i b

a.difference(b) a-b różnica zbiorów

a.intersection(b) a&b iloczyn zbiorów

a.symmetric_difference(b) a^ b różnica symetryczna

len(a) moc zbioru

a.issupperset(b) a>=b czy b jest podzbiorem a

a.issubbset(b) a<=b czy a jest podzbiorem b

(28)

PYTHON – SKŁADNIA PYTHONA

Intrukcje warunkowe Pętle

Wyjątki

Funkcje

Moduły

(29)

Instrukcje warunkowe

IF war: ... [ELIF war : .... ][ELSE: ...]

if a>3:

if 4<5:

print 2 else:

print 3 else:

print 4

print 5

(30)

Pętle

for i in range (1,10):

for ch in „asdjfna”:

for i,ch in

enumerate([1,2,5,3,7]):

for i in xrange(10000):

while

break; continue; else

(31)

Wyjątki

try:

...

except IOError, e:

# Obsługa błędu I/O except TypeError, e:

# Obsługa błędu w typie except NameError, e:

# Obsługa błędu w nazwie finally:

...

(32)

Funkcje

def fun(x, name=‘Kowal’, ..

*arg1, **arg2):

Dekoratory

@gfun

return a,b,c yield a

global, local

(33)

Formy lambda

t=[lambda x,y:x+y, lambda x,y:x*y, lambda x,y: x//y]

t.sort(lambda

x,y:cmp(int(x),int(y)))

print ‚%2f’ % (lambda x,y:

x**y)(2,0.5)

(34)

Moduły

from moduł import funkcja

import moduł

from moduł import *

dir( moduł )

 moduł .__name__ modu ł.__dict__

 moduł .__doc__

(35)

PYTHON – TECHNIKI PROGRAMOWANIA

Programowanie funkcyjne – zip, filter, reduce Programowanie obiektowe – klasy

Wejście/wyjście - pliki

(36)

Elementy programowania funkcyjnego - filter

def f(x):

bol=1

for i in range(2,int(math.sqrt(x))+1):

bol=bol and x % i != 0 return bol

filter(f, range(2, 100))

T=[x for x in range(2,100) if f(x)]

(37)

Elementy programowania funkcyjnego - map

def fcos(k): return “%5.3f “ % math.cos(k*k)

map(fcos,range(1,11))

def fcos(k,x): return “%5.3f “ % math.cos(k*k*x)

map(fcos,range(5),[1.2, 1.5, 3.2, .3, 4.1])

[fcos(x) for x in range(1,11)]

 [fcos(k,x) for x in range(5)

for k in [1.2, 1.5, 3.2, .3,

4.1]]

(38)

Elementy programowania funkcyjnego - reduce

def dodaj(x,y):

return x+y

reduce(dodaj, range(1, 11)) Problem:

Jak tą konstrukcję zapisać w

postaci comprehensive list

(39)

Funkcje eval(), exec(), execfile() i compile()

str = „for i in range(0,10): print i*i”

c = compile(str,”,’exec’) # Kompilacja na obiekt typu kod

exec c # Wykonanie tego kodu

x,y=5,12

str = „3*x + 4*y”

d = compile(str, ‘’,’eval’) # Kompilacja na wyrażenie

result = eval(d) # Wykonanie go

(40)

Klasy

class Konto:

typ_konta = „Podstawowe”

def__init__(self, nazwisko, saldo) : self.nazwisko = nazwisko

self.saldo = saldo def wpłata(self,kwota):

self.saldo = self.saldo + kwota def wypłata(self,kwota):

self.saldo = self.saldo – kwota def info (self):

return self.saldo

(41)

Dziedziczenie

class

NazwaKlasyPotomnej(NazwaKlasyBazow ej):

class

NazwaKlasyPotomnej(NazwaKlasyBazow ej1, NazwaKlasyBazowej2, ...):

Klasa.__mro__ - kolejność dziedziczenia

(gdy klasy dziedziczą po klasie object)

(42)

Atrybuty i metody klas i instancji

Atrybut Opis

c.__dict__ Słownik skojarzony z klasą c.__doc__ Napis dokumentacyjny klasy c.__name__ Nazwa klasy

c.__module__ Nazwa modułu, w którym klasa została zdefiniowana c.__bases__ Krotka z klasami bazowymi

Atrybut Opis x.__dict__

x.__class__ Słownik skojarzony z instancja

Klasa, do której należy instancja

(43)

Przeciążanie operatorów

Metoda Rezultat

__add__(self, other) self + other __sub__(self, other) self – other __mul__(self, other) self * other __div__(self, other) self / other __truediv__(self, other) self \ other __floordiv__(self, other) self \ \ other __mod__(self, other) self % other

__divmod__(self, other) divmod(self, other)

__pow__(self, other [, modulo}) self * * other; pow(self, other, modulo) __lshift__(self, other) self << other

__rshift__(self, other) self >> other __and__(self, other) self & other __or__(self, other) self | other __xor__(self, other) self ^ other __radd__(self, other) other + self __rsub__(self, other) other - self __rmul__(self, other) other * self __rdiv__(self, other) other / self __rmod__(self, other) other % self

__rdivmod__(self, other) divmod (other, self)

__neg__(self) - self

__pos__(self) +self

(44)

Otwieranie i zamykanie plików

(45)

Odczytywanie

zawartości pliku

file=open("plik.txt",'rU')

#1. buffer=file.read()

#2. inList=file.readlines()

#3.

wordCount, wordList=0,[]

for line in file:

for word in line.split():

wordlist.append(word) wordCount+=1

file.close()

(46)

Zapisywanie

informacji do pliku

file.writelines(wordList) file.write(a)

for a in wordList:

print >>file, “\t

Pracownik: %s“,a

(47)

Atrybuty obiektu file

A tryb u t Z n aczen ie

f.c lo s e( ) Z am yk a zb iór. N ie m ożn a n ic w yk on yw ać n a zb iorze p o jego zam k n ięciu ..

f.c lo s ed P rzyjm u je w artość T ru e jeśli b yło u żyte f.close() i zb iór jest zam k n ięty.

f.e n co d in g A tryb u t tylk o d o od czytu . M oże to b yć n p .: ‘ascii’, ‘latin -1’ (lu b „iso- 8859 -1’), ‘u tf-8’, ‘u tf-16’, ‘u tf-16-le’, ‘u tf-16-b e’

f.flu s h ( ) W ym agan ie ab y zb iór f b ył b u forow an y

f.isa tty ( ) Z w raca T tru e jeśli f jest zb iorem n a in terak tyw n ym term in alu

f.file n o ( ) Z w raca liczb ę całk ow itą k tóra jest d esk ryp to rem zb io ru w system ie op eracyjn ym

f.m o d e M ów i w jak im tryb ie p lik został otw orzon y (m etod ą op en )

f.n a m e M ów i n am z jak ą n azw ą zb ioru p lik został otw orzon y m etod a op en .

f.n e w lin e s M oże to b yć jed en z łań cu ch ów ‘\n ’, ‘\r’ lu b ‘\r\n ’ (gd y lin ie w p lik u są w ten sp osób od d zielan e); k rotk a, gd y lin ie m ają różn e sep aratory i N on e, k ied y n ie m a sep aratora lin ii lu b f zostało otw arte w tryb ie

‘U ’.

f.re a d ( s iz e = 1 ) C zyta m ak sym aln ie (gd y m oże ze zb ioru ) size b ajtów ze zb ioru f od b ieżącej p ozycji i zw raca je jak o łań c u ch

f.re a d lin e ( s iz e = 1 ) C zyta i zw raca jed en w iersz ze zb ioru aż d o n ap otk an ia zn ak u k oń ca lin ii ‘\n ’ w łączn ie.

f.re a d lin e s( s iz e = 1 ) C zyta i zw raca listę w szystk ich lin ii zb ioru f k ażd y łań cu ch k oń cząc

‘\n ’. j

f.s e e k ( p o s ,

h o w = 0 ) U staw ia b ieżącą p ozycję w zb iorze f n a (d od atn ia lu b u jem ną) liczb ę całk ow itą b ajtów p os w stosu n k u d o u stalon ego p u n k tu

f.te ll( ) Z w raca b ieżącą p ozycję w zb iorze

f.tr u n c a te( [ s iz e ] ) O b cin a zb iór f.

f.w rite ( s ) Z ap isu je łań cu ch s d o zb ioru .

f.w rite lin e s( lst) D ziała tak jak :

fo r lin e in ls t:

f.w rite ( lin e )

gd zie lst jest listą lu b k rotk ą.

(48)

BIBLIOTEKI PYTHON

Moduły os i glob Moduł zipfile

Moduły pickle i cpickle

Moduły thread i threading Moduł urllib

Moduły timeit, cprofile i unittest Moduł sympy

Moduł matplotlib Moduł Tkinter Vpython

Django

(49)

Przetwarzanie katalogów i moduł glob

import os

os.popen(‘dir/B’).readlines()

[‘cos-ph.html\n’, ’python2.5.tar.gz\n’,

’cos-ph1a.html\n’,‘cos- pu2.html\n’,‘work1\n’ ]

glob.glob(‘[acu]os*.ht??’)

[‘cos-ph.html’,’cos-ph1a.html’,’cos-

pu2.html’]

(50)

Moduł zipfile

zipfile(filename [, mode [, compression]])

write(filename [, arcname [,comprerssion]])

.read(filename)

.namelist()

(51)

Marynowanie i odmarynowanie

pickle.dump(x, f)

f = open(‘mójplik’, ‘w’)

p = pickle.Pickler(f) p.dump(x)

x = pickle.load(f)

f = open(‘mójplik’)

u = pickle.Unpickler(f)

x = u.load()

(52)

Przetwarzanie wielowątkowe

import thread, time

def print_time(threadName, delay):

while 1:

time.sleep(delay)

print “%s: %s “ % (threadName, time.ctime(time.time()))

thread.start_new_thread(print_time, (“Wątek 1”,2,)) thread.start_new_thread(print_time, (“Wątek 2”,4,)) while 1:

pass

(53)

Moduł urllib –

pobieranie adresów url

u=urllib.urlopen(url) buffer=u.read()

u.info()

u.geturl()

(54)

Testowanie – timeit, cprofile i unittest

import timeit

t=timeit.Timer(‘func(232)’, ‘from __main__

import func’)

t.timeit(number=200000) cProfile.run( ‘func(232)’) import unittest

class TestSequenceFunctions(unittest.TestCase):

def func(self): …

def test_shuffle(self): …

def test_choice(self): …

def test_sample(self): …

unittest.main()

(55)

Obliczenia symboliczne - Sympy

from sympy import *

x,y=Symbol(‘x’), Symbol(‘y’)

limit(exp(-x)/(x+cos(x)), x, oo ) # granica 0 diff(exp(x)*sin(2*x), x, 2) # pochodna

-3*exp(x)*sin(2*x) + 4*cos(2*x)*exp(x) (1/cos(x)).series(x,0,5) # szereg Taylora

1 + x**2/2 + 5*x**4/24+o(x**5)

integrate(x*exp(-x), (x, 0, oo)) # całka 1

solve(-3*x*2+5*x-1,x) # [-1] -3x^2+5x-1=0

(56)

Matplotlib i wykresy

(57)

Tkinter –

najprostszy widget

from Tkinter import * root = Tk()

w = Label(root,

text=”Witajcie!”) w.pack()

root.mainloop()

(58)

Tkinter – widget opisany jako klasa

from Tkinter import *

class Labeldemo(Frame):

def __init__(self):

Frame.__init__( self )

self.lab= Label(root, text=”Witaj!”) self.pack( expand = YES, fill = BOTH ) self.lab.pack()

Labeldemo.mainloop()

(59)

Tkinter

- Przycisk i pole tekstowe

prz1= Button(self, text=”QUIT”, fg=”red”, command=self.quit1, width=16,

height = 1)

ent1 = Entry(self.frame2, name = “tekst 4”, show =“*”)

self.ent1.insert( INSERT, “Tekst ukryty” ) self.ent1.bind( “<Return>”,

self.showContents )

self.ent1.pack( side = LEFT, padx = 5 )

theName = event.widget.winfo_name()

theContents = event.widget.get()

(60)

Widgety modułu Tkinter

Widget Opis

Button Prosty przycisk używany do wykonywania procedur lub innych operacji

Canvas Struktura graficzna. Ten widget moze być używany do rysowania grafów i wykresów i tworzenia graficznych edytorów

Checkbutton Reprezentuje zmienną która może przyjmować dwie różne wartości.

Klikając zmienia się wartość tej zmiennej na drugą Entry Pole do wpisania tekstu.

Frame Kontener na widgety. Może mieć ramkę i tło, i jest używane do grupowania widgetów

Label Wyświetla tekst lub obraz

Listbox Wyświetla liste do wyboru. Ta lista może być skonfigurowana jak radiobutton albo jak checklist.

Menu Panel menu. Używane do implementowania rozwijalnego menu.

Menubutton Używane do implementowania rozwijalnego menu.

Message Wyświetla tekst, podobny do label ale może dostosować sam rozmiar tekstu do zadanej szerokości i proporcji

Radiobutton Reprezentuje jedną wartość lub zmienną która może przyjmowaćjedną z wielu

Scale. Pozwala ustawić wartość liczbową przez kliknięcie na skali

Scrollbar Standartowy scrollbar do użycia z canvas, entry, listbox, i text widgets.

Text Formatted text display.

Pozwala wyświetlać i edytować tekst z różnymi stylami I atrybutami.

Także umozliwia wyświetlanie obrazów i okien

Toplevel Kontener widgetów wyświetlanych jako osobne okno

(61)

Tkinter - geometria grid

Opcja Typ Opis

column, row Integer Wstawia widget do tej kolumny/wiersza (domyslna 0) columnspan

rowspan

Integer Jeśli jest wskazuje na ilu wiecej kolumnach/wierszach widget ma się rozpiąć

in_ Widget Umieszcza widget wewnątrz zadanego widgetu. Można umieścić widget tylko wewnątrz widgety rodziciela (bazowego)

ipadx, ipady Distance Opcjonalne podanie miejsca na widget w komórce względem brzegu komórki (domyślne 0)

padx, pady Distance Opcjonalne podanie miejsca na widget w komórce (domyślne 0) sticky constant Definiujemy jak rozciągnąć widget w komórce jeśli jest ona większa

od widgetu. Może to być kombinacja stałych S,N,W,E,NW,NE,SW i SE. Np. W+E oznacza że widget może być rozciągniety w poziomie.

(62)

Tkinter – geometria pack

widget.pack(side=LEFT, anchor=’nw’, expand=NO)

widget.pack(side=TOP, anchor=’center’, expand=NO, padx=20, pady=20)

widget.pack(side=BOTTOM, anchor=’s’,

expand=YES, fill=Y, padx=20, pady=20)

(63)

Tkinter -

geometria place

w.place(relx=x,rely=y, anchor=tekst,

bordermode=INSIDE/OUTSIDE)

w.place( relx=xpos, rely=0.99,

anchor=S)

(64)

Tkinter - fonty

tkFont.Font(family=”Times”, size=10, weight=tkFont.BOLD)

tkFont.Font(family=”Tahoma”,size=10,weight=tkFo nt.BOLD,slant=tkFont.ITALIC)

Atrybuty klasy fontów są nastepujące:

family typu string. Nazwa rodziny fontów..

size typu integer Rozmiar fontu w punktach jeśli size>0 I w pixelach jeśli ujemne.

weight grubość fontu. Używaj NORMAL(domyślne) lub BOLD.

slant używaj NORMAL(domyslne) lub ITALIC .

underline Watość logiczna jesli 1 (True) to podkreślony, domyślny False.

overstrike

Wartość logiczna gdy 1 (True) to przekreślony, domyślny 0

(65)

Tkinter – kształty

kursora

(66)

Tkinter–widgety toplevel i radiobutton, checkbutton

t1 = Toplevel(root)

Label(t1, text=’Podpis’).pack(padx=10, pady=10) var,var1 = IntVar(), IntVar()

tlist= [(‘a1’, 1), (‘a2’, 2), (‘a3', 3), (u‘a4', 4), (‘a5', 5),(‘a6', 6)]:

for text, value in tlist:

Radiobutton(root, text=text, value=value, variable=var).pack(anchor=W)

setattr(var1, text, IntVar())

Checkbutton(root, text=poet, state=status, anchor=W, variable =getattr(var1, tlist)).grid(row=row, column=col, sticky=W)

var.set(3)

print getattr(var, ‘a1').get()

(67)

Tkinter – widget Menu

root=Tk()

root.title("Menu dla zbiorów") menubar = Menu(root)

filemenu = Menu(menubar, tearoff=0)

filemenu.add_command(label="Nowy", command=‘f1’) filemenu.add_command(label="Otwórz", command=‘f2’) filemenu.add_command(label="Nagraj", command=‘f3’) filemenu.add_command(label="Nagraj jako...",

command=‘f4’)

root.config(menu=menubar)

root.mainloop()

(68)

Tkinter – widget Message

from Tkinter import * root=Tk()

Message(root, text=u"Pythona stworzy\u0142 .."

u" – jako nast\u0119pc\u0119 j\u0119zyka ABC ... „,

bg='yellow',fg='#0537FF',relief=GROOVE).

pack(padx=10, pady=10)

root.title(u"Wid\u017cet Message")

root.mainloop()

(69)

Tkinter – widget canvas

canvas = Canvas(root, width=400, height=600, bg='white')

canvas.pack(expand=YES, fill=BOTH) canvas.create_line(100, 100, 200, 200) canvas.create_oval(10, 10, 300, 300, width=2,

fill='yellow')

canvas.create_arc(100, 200, 300, 100, fill='green') canvas.create_rectangle(50, 200, 300, 300, width=5,

fill='#8f8fff')

photo=PhotoImage(file='006.gif')

canvas.create_image(50, 300, image=photo, anchor=NW) widget = Label(canvas, text=u'Ko\u0142o', fg='white',

bg='black') widget.pack()

canvas.create_window(100, 100, window=widget)

canvas.create_text(100, 280, text=u'Prostok\u0105t')

(70)

Tkinter – widget scrollbar

list = Listbox(root, height=20, width=38)

scroll = Scrollbar(root, command=list.yview)

list.configure(yscrollcommand=scr oll.set)

list.pack(side=LEFT)

scroll.pack(side=RIGHT, fill=Y)

(71)

Vpython - obiekty

arrow

box cone

convex curve cylinder

ellipsoid faces helix

label points pyramid

ring sphere

text

(72)

Vpython – atrybuty obiektów

Atrybut Znaczenie Domyślnie

pos pozycja środka podstawy (0,0,0)

axis współrzędne wektora od podstawy do końca strzałki (1,0,0)

x,y,z współrzędne atrybutu pos 0,0,0

length długość axis jak axis

color kolor trójka RGB (r,g,b) (1,1,1)

r,g,b wartości koloru – liczby od 0-1, nasycenie barwą czerwoną, zieloną, niebieską

1,1,1 (biały) up strona która strzałka jest skierowana do góry (0,1,0)

opacity przezroczystość obiektu 1 (0 całkowicie

przezroczysty)

shaftwidth szerukość trzonka strzałki 0.1*(długość

strzałki)

headwidth szerokość grota strzałki 2*shaftwidth

headlength długość grota strzałki 3*shaftwidth

(73)

Vpython - krzywe

1. c=curve(x=arange(0,20,0.1)) c.y=sin(2.0*c.x)

c.z=cos(2.0*c.x)

2. curve(x=arange(100), y=arange(100)**0.5, color=color.red) 3. eqn=raw_input(‘funkcja f(x)=’)

x=arange(0,10,0.1)

curve(x=x, y=eval(eqn)) 4. t=arange(0,10,0.1)

curve(x=sin(t), y=1.0/(1+t), z=t**0.5, red=cos(t), green=0, blue=0.5*(1- cos(t)) 5. c=curve(color=color.cyan)

for t in arange(0,2*pi, 0.1):

c.append(pos=(t,sin(t),cos(t)))  6. trail=curve()

ball=sphere()

trail.append(pos=ball.pos)

(74)

Vpython - wykresy

from visual.graph import *

funct1 = gcurve(color=color.cyan)

funct2 = gvbars(delta=0.5, color=color.red) funct3 = gdots(color=color.yellow)

for t in arange(-30, 74, 1):

funct1.plot( pos=(t, 5.0+5.0*cos(-0.2*t)*exp(0.015*t)) ) funct2.plot( pos=(t, 2.0+5.0*cos(-0.1*t)*exp(0.015*t)) ) funct3.plot( pos=(t, 5.0*cos(-0.03*t)*exp(0.015*t)) )

histo = gdisplay(title='Histogram', x=0, y=400, width=800,height=400) datalist1 = [5, 37, 12, 21, 25, 28, 8, 63, 52, 75, 7]

data = ghistogram(bins=arange(-20, 80, 10), color=color.red) data.plot(data=datalist1)

datalist2 = [7, 23, 25, 72, -15]

data.plot(data=datalist2, accumulate=1)

(75)

Django – framework sieciowy

# Plik: models.py (tabele bazy danych) from django.db import models

class Book(models.Model):

name = models.CharField(max_length=50) pub_date = models.DateField()

# Plik: views.py (logika biznesowa)

from django.shortcuts import render_to_response from models import Book

def latest_books(request):

book_list = Book.objects.order_by('-pub_date')[:10]

return render_to_response('latest_books.html', {'book_list':

book_list})

(76)

Django – framework sieciowy

# Plik: urls.py (konfiguracja adresów URL)

from django.conf.urls.defaults import * import views

urlpatterns = patterns('',

(r'^latest/$', views.latest_books),)

# Plik: latest_books.html (szablon)

<html><head><title>Książki</title></head>

<body>

<h1>Książki</h1>

<ul> {% for book in book_list %}

<li>{{ book.name }}</li>

{% endfor %} </ul>

</body></html>

(77)

Django – instalacja i

uruchomienie serwera

(78)

Django – panel

admina

(79)

Django – kojarzenie

danych z formularzami

(80)

Filozofia ZEN Pythona

ZEN PY T H O N a T łum aczenie na polski

B eautiful is better than ugly. Śliczny jest lepszy niż brzydki.

E xplicit is better than implicit. Jaw ny jest lepszy niż domyślny.

Simple is better than complex. Prosty jest lepszy niż złożony.

C om plex is better than co m plicated. Złożony jest lepszy niż skom plikow any.

Flat is better than nested. Płaski jest lepszy niż zagnieżdżony.

Sparse is better than dense. R zadki jest lepszy niż gęsty.

R eadability counts. L iczy się czytelność.

Special cases aren’t special enough to break the rules.

Sytuacje w yjątkow e nie są na tyle w yjątkow e, żeby łamać reguły.

A lthough practicality beats purity. C hociaż praktyczność przew aża nad czystością.

E rrors should never pass silently. B łędy nigdy nie pow inny zostać niezauw ażone.

U nless explicitly silenced. C hyba że zostaną celow o ukryte.

In the face of am biguity, refuse the tem ptation

to guess. W przypadku niejasności, odrzuć pokusę zgadyw ania.

T here should be one— and preferably only one— obvious w ay to do it.

Pow inien być jeden - i najlepiej tylko jeden - oczyw isty sposób na zrobienie czegoś.

A lthough that w ay m ay not be obvious at first unless you’re D utch.

C hociaż ten sposób m oże nie być oczyw isty, jeśli nie jesteś H olendrem.

N ow is better than never. T eraz jest lepsze niż nigdy.

A lthough never is often better than right now . C hociaż nigdy jest często lepsze, niż akurat teraz.

If the im plem entation is hard to explain, it’s a bad idea.

Jeśli im plem entacja jest trudna do w yjaśnienia, jest to zła im plem entacja

If the im plem entation is easy to explain, it may be a good idea.

Jeśli im plem entacja jest łatw a do w yjaśniania, to jest to dobry pomysł (implem entacja).

N am espaces are one honking great idea — let’s do m ore of those!

Przestrzeń nazw to niesam ow icie genialny pom ysł - m iejm y ich w ięcej!

Cytaty

Powiązane dokumenty

Krowa – łaciate cielątko, Koza – rogate koźlątko, Owca – kudłate jagniątko, Świnka – różowe prosiątko, Kurka – pierzaste kurczątko, Gąska – puchate gąsiątko,

[,end]]) Sprawdza czy łańcuch zaczyna się od prefiksu prefix s.strip([chrs]) Usuwa wiodące i końcowe spacje lub znaki z chrs s.swapcase() Zamienia duże na małe litery i

(1) powołujemy dwa pomocnicze wskaźniki: pred ustawiamy na pusty adres, a succ na adres pierwszego węzła (head) i przechodzimy nimi w kierunku końca listy tak, aby wskaźnik pred

(2) za pomocą pary pomocniczych wskaźników pred i succ wybieramy węzeł do przeniesienia i przenosimy go do listy tymczasowej za pomocą wskaźnika mover (aktulizując wskaźniki head

● szablony pozwalają na wielokrotne wykorzystanie istniejącego kodu źródłowego struktury danych dla wielu wersji tej struktury z tym samym interfejsem, ale różnymi typami

● strumienie wejścia/wyjścia: iostream, fstream, sstream, iomanip. ●

(3) przestawiamy wskaźnik next w węźle wskazywanym przez pred (lub wskaźnik head gdy pred jest pusty) oraz wskaźnik prev w węźle wskazywanym przez succ (lub wskaźnik tail gdy

Umiejętności: dziecko potrafi słuchać; tworzy zasady działania w grupie podczas wspólnej pracy; ustawia przedmioty w szeregu od najniższego do najwyższego; stosuje