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/Python/ - 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
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
1x//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 yx**y x do potęgi y
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
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])
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”
1f 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())
2s 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ł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
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(NazwaKlasyBazowej):
class NazwaKlasyPotomnej(NazwaKlasyBazowej1, 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
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
aOdczytywanie
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
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ą.
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=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
Tkinter – 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=scroll.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 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!