PYTHON – PODSTAWY I STRUKTURY DANYCH
Instalacja
Środowisko, struktura, zastosowania, historia Typy danych i ich konwersja
Liczby Łańcuchy Listy
Krotki
Słowniki
Zbiory
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/
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
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 .
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
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 ...
Struktura modułów Pythona
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
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
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
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)
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
Operacje na danych
liczbowych
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
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
Wycinanie sekwencji
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
Ł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)
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 „%”.
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})
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)
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
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”]
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:]
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}
Metody i atrybuty słowników
Operacja Użycie Działanieclear 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
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
PYTHON – SKŁADNIA PYTHONA
Intrukcje warunkowe Pętle
Wyjątki
Funkcje
Moduły
Instrukcje warunkowe
IF war: ... [ELIF war : .... ][ELSE: ...]
if a>3:
if 4<5:
print 2 else:
print 3 else:
print 4
print 5
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
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:
...
Funkcje
def fun(x, name=‘Kowal’, ..
*arg1, **arg2):
Dekoratory
@gfun
return a,b,c yield a
global, local
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)
Moduły
from moduł import funkcja
import moduł
from moduł import *
dir( moduł )
moduł .__name__ modu ł.__dict__
moduł .__doc__
PYTHON – TECHNIKI PROGRAMOWANIA
Programowanie funkcyjne – zip, filter, reduce Programowanie obiektowe – klasy
Wejście/wyjście - pliki
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)]
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]]
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
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
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
Dziedziczenie
class
NazwaKlasyPotomnej(NazwaKlasyBazow ej):
class
NazwaKlasyPotomnej(NazwaKlasyBazow ej1, NazwaKlasyBazowej2, ...):
Klasa.__mro__ - kolejność dziedziczenia
(gdy klasy dziedziczą po klasie object)
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
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
Otwieranie i zamykanie plików
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()
Zapisywanie
informacji do pliku
file.writelines(wordList) file.write(a)
for a in wordList:
print >>file, “\t
Pracownik: %s“,a
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 ą.
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
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’]
Moduł zipfile
zipfile(filename [, mode [, compression]])
write(filename [, arcname [,comprerssion]])
.read(filename)
.namelist()
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()
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
Moduł urllib –
pobieranie adresów url
u=urllib.urlopen(url) buffer=u.read()
u.info()
u.geturl()
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()
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
Matplotlib i wykresy
Tkinter –
najprostszy widget
from Tkinter import * root = Tk()
w = Label(root,
text=”Witajcie!”) w.pack()
root.mainloop()
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()
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()
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
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.
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)
Tkinter -
geometria place
w.place(relx=x,rely=y, anchor=tekst,
bordermode=INSIDE/OUTSIDE)
w.place( relx=xpos, rely=0.99,
anchor=S)
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 0Tkinter – kształty
kursora
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()
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()
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()
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')
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)
Vpython - obiekty
arrow
box cone
convex curve cylinder
ellipsoid faces helix
label points pyramid
ring sphere
text
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
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)
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)
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})
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>
Django – instalacja i
uruchomienie serwera
Django – panel
admina
Django – kojarzenie
danych z formularzami
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!