• Nie Znaleziono Wyników

STRUKTURY DANYCH

N/A
N/A
Protected

Academic year: 2021

Share "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/Python/ - 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

Operacja Wynik

x+y suma x i y

x-y różnica x i y

x*y iloczyn x i y

x/y iloraz x i y

1

x//y część całkowita z ilorazu x przez y x%y reszta z ilorazu x przez y

-x zanegowane x

+x x nie zmienione

abs(x) wartość bezwzględna x

c.conjugate(x) sprzężenie liczby zespolonej c divmod(x,y) krotka (x//y,x%y)

pow(x,y[,z])

x do potęgi y (lub

 

 

z x z

x

y y

x**y x do potęgi y

(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

S e k w e n c j a

0 1 2 3 4 5 6 7 8

0 1 2 3 ... len(s)-4 len(s)-3 len(s)-2 len(s)-1

-9 -8 -7 -6 -5 -4 -3 -2 -1

-len(s) -len(s)+1 -len(s)+2 -len(s)+3 … -4 -3 -2 -1

Sekwencje S[0:len(s):1] S[el. początkowy: el ostatni+1:krok]

Sekwencje mutowalne:

listy lista=[‘ala’,1.3, -2J,[‘s’,12],-3e5]

słowniki slown={‘a’:-2.35, ‘ster’: 3.333, 1: ‘al.’}

zbiory set zbior= set([’a’,’b’,3,4]) Sekwencje niemutowalne:

łańcuchy lancuch=”asg132asvd”

krotki krotka=(1,23,’a’,[3,{‘1’:2}],)

zbiory frozenset zbior= frozenset([’a’,’b’,3,4])

(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(NazwaKlasyBazowej):

class NazwaKlasyPotomnej(NazwaKlasyBazowej1, 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

file=open(path [, mode [,buffersize]]) file.close()

Tryb Opis

r Otwiera istniejący plik do odczytu

w Otwiera plik do zapisu. Jeśli plik już istnieje, jago zawartość jest kasowana.

Jeśli plik jeszcze nie istnieje to tworzony jest nowy

a Otwiera istniejący plik do uaktualnienia, zachowując istiejącą treść bez zmian i dopisując do niej nową treść

r+ Otwiera plik zarówno do zapisu jak i odczytu. Istniejąca treść pozostaje nietknięta

w+ Otwiera plik zarówno do zapisu jak i odczytu. Istniejąca treść jest kasowana.

a+ Otwiera istniejący plik zarówno do odczytu jak i do uaktualnienia, zachowując istiejącą treść bez zmian i dopisując do niej nową treść

b Stosowana w dodatku do powyższych opcji. Otwiera plik w trybie binarnym.

U Stosowana w dodatku do powyższych opcji. Stosuje “uniwersalny” translator

nowych wierszy do otwieranego pliku

a

(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

Atrybut Znaczenie

f.close() Zamyka zbiór. Nie można nic wykonywać na zbiorze po jego zamknięciu..

f.closed Przyjmuje wartość True jeśli było użyte f.close() i zbiór jest zamknięty.

f.encoding Atrybut tylko do odczytu. Może to być np.: ‘ascii’, ‘latin-1’ (lub „iso- 8859-1’), ‘utf-8’, ‘utf-16’, ‘utf-16-le’, ‘utf-16-be’

f.flush() Wymaganie aby zbiór f był buforowany

f.isatty() Zwraca Ttrue jeśli f jest zbiorem na interaktywnym terminalu

f.fileno() Zwraca liczbę całkowitą która jest deskryptorem zbioru w systemie operacyjnym

f.mode Mówi w jakim trybie plik został otworzony (metodą open)

f.name Mówi nam z jaką nazwą zbioru plik został otworzony metoda open.

f.newlines Może to być jeden z łańcuchów ‘\n’, ‘\r’ lub ‘\r\n’ (gdy linie w pliku są w ten sposób oddzielane); krotka, gdy linie mają różne separatory i None, kiedy nie ma separatora linii lub f zostało otwarte w trybie

‘U’.

f.read(size=1) Czyta maksymalnie (gdy może ze zbioru) size bajtów ze zbioru f od bieżącej pozycji i zwraca je jako łańcuch

f.readline(size=1) Czyta i zwraca jeden wiersz ze zbioru aż do napotkania znaku końca linii ‘\n’ włącznie.

f.readlines(size=1) Czyta i zwraca listę wszystkich linii zbioru f każdy łańcuch kończąc

‘\n’. j

f.seek(pos,

how=0) Ustawia bieżącą pozycję w zbiorze f na (dodatnia lub ujemną) liczbę całkowitą bajtów pos w stosunku do ustalonego punktu

f.tell() Zwraca bieżącą pozycję w zbiorze

f.truncate([size]) Obcina zbiór f.

f.write(s) Zapisuje łańcuch s do zbioru.

f.writelines(lst) Działa tak jak:

for line in lst:

f.write(line)

gdzie lst jest listą lub krotką.

(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=tkFont.BOLD,slant=t kFont.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=scroll.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 PYTHONa Tłumaczenie na polski

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

Explicit is better than implicit. Jawny jest lepszy niż domyślny.

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

Complex is better than complicated. Złożony jest lepszy niż skomplikowany.

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

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

Readability counts. Liczy się czytelność.

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

Sytuacje wyjątkowe nie są na tyle wyjątkowe, żeby łamać reguły.

Although practicality beats purity. Chociaż praktyczność przeważa nad czystością.

Errors should never pass silently. Błędy nigdy nie powinny zostać niezauważone.

Unless explicitly silenced. Chyba że zostaną celowo ukryte.

In the face of ambiguity, refuse the temptation

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

There should be one—and preferably only one—obvious way to do it.

Powinien być jeden - i najlepiej tylko jeden - oczywisty sposób na zrobienie czegoś.

Although that way may not be obvious at first unless you’re Dutch.

Chociaż ten sposób może nie być oczywisty, jeśli nie jesteś Holendrem.

Now is better than never. Teraz jest lepsze niż nigdy.

Although never is often better than right now. Chociaż nigdy jest często lepsze, niż akurat teraz.

If the implementation is hard to explain, it’s a bad idea.

Jeśli implementacja jest trudna do wyjaśnienia, jest to zła implementacja

If the implementation is easy to explain, it may be a good idea.

Jeśli implementacja jest łatwa do wyjaśniania, to jest to dobry pomysł (implementacja).

Namespaces are one honking great idea—let’s do more of those!

Przestrzeń nazw to niesamowicie genialny pomysł - miejmy ich więcej!

Cytaty

Powiązane dokumenty

[,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

[,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

(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

W kolejnych rubrykach (dom, szkoła, podwórko) uczniowie wymieniają działania, czynności, które – jak sądzą – wykonują bardzo dobrze. Na wykonanie zadania mają 10 minut.

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

Napisz wyzwalacz, kt´ory przed wstawieniem lub modyfikacj¸a danych w tabeli pracownicy sprawdza, czy warto´s´c zarobk´ow jest wy˙zsza od zera 2.. Napisz wyzwalacz

Też

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,