Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje...

Post on 19-Jul-2020

0 views 0 download

Transcript of Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje...

Wprowadzenie do Pythona

Krzysztof Miernik

1

Jezyk Python

• Stworzony w 1991 przez Guido van Rossuma

• Nazwa pochodzi od „Monty Python Flying Circus”

• Jest jezykiem wysokiego poziomu ogólnego przeznaczenia

• Jednym z naczelnych załozen projektowych jest czytelnosc kodu

• Umozliwia programowanie proceduralne, obiektowe i funkcyjne

• Typowanie dynamiczne i słabe

• Automatyczne zarzadzanie pamiecia

• Bardzo bogata biblioteka standardowa (batteries included)

• Nieprawdopodobnie bogate biblioteki dodatkowe (i sa łatwe do

instalowania)

Uwaga: python2 odchodzi na emeryture 1 stycznia 2020!

Dlaczego Python? 2

Python, a inne jezyki

Dlaczego Python? 3

Dlaczego Python?

Google Trends – popularno�� zapyta� wzgl�dem kategorii Programowanie

Python

C++

Dlaczego Python? 4

Dlaczego Python?

Nature 518, 7537 (2015)

Dlaczego Python? 5

Wprowadzenie do Pythona

• Python jako kalkulator

• liczby, ciagi znaków, listy

• instrukcje while, if, for

• skrypty, moduły

• listy, krotki, słowniki

• metody wejscia/wyjscia

• programowanie obiektowe

• biblioteka standardowa

• inne biblioteki

Podstawy Pythona 6

Python jako kalkulator

Duza czesc przykładów pochodzi z oficjalnego wprowadzenia do Pythonahttps://docs.python.org/3/tutorial/index.html.Obliczenia w interpreterze

>>> 2 + 2

>>> 12 * 0.153 - 0.33

>>> 12 * (0.153 - 0.33)

>>> 17 / 3

>>> 17 // 3

>>> 17 % 3

>>> 2**3

>>> 2**(1/2)

>>> -3**2

>>> (-3)**2

>>> width = 20

>>> height = 50 + 9

>>> width * height

>>> _ / 10**2

Podstawy Pythona 7

Łancuchy znaków (1)

Definiowanie łancucha, polecenie print

>>> ’spam eggs’

>>> ’doesn\’t’

>>> "doesn’t"

>>> ’"Yes", he said.’

>>> "\"Yes\", he said."

>>> ’First line.\nSecond line.’

>>> s = ’First line.\nSecond line.’

>>> print(s)

>>> print(’C:\some\name’)

>>> print(r’C:\some\name’)

>>> print("""\

Ala

ma

kota

""")

>>> 3 * ’un’ + ’ium’

Podstawowe struktury danych 8

Łancuchy znaków (2)

Podzbiory łancucha, operacje

>>> prefix = ’Py’

>>> glued = prefix + ’thon’

>>> glued[0]

>>> glued[5]

>>> glued[-1]

>>> glued[-2]

>>> glued[0:2]

>>> glued[-2:]

>>> glued[:2]

>>> glued[:2] + glued[2:]

>>> glued[0] = ’C’

>>> ’C’ + glued[1:]

>>> len(glued)

Podstawowe struktury danych 9

Łancuchy znaków (3)

Formatowanie łancucha

>>> print(’{}’.format(’string’))

>>> print(’{} ma {}’.format(’ala’, ’kota’))

>>> s = "{0} {1} {2}"

>>> s = s.format(’Ala’, ’ma’, ’kota’)

>>> print(s)

>>> s = "{kto} {co} {kogo}"

>>> s = s.format(kto=’Ala’, co=’ma’, kogo=’kota’)

>>> print(s)

>>> pi = 3.141592653589793

>>> print(pi)

>>> print(’{:.3f}’.format(pi))

>>> print(’{:.3e}’.format(pi))

>>> print(’{: 8.3f}’.format(pi))

>>> print(’{:#^8.1f}’.format(pi))

>>> print(’{:*>8.1f}’.format(pi))

>>> print(’{:$<8.1f}’.format(pi))

Podstawowe struktury danych 10

Listy

Definiowanie, podstawowe operacje

>>> squares = [1, 4, 9, 16, 25]

>>> squares

>>> squares[2]

>>> squares[-1]

>>> squares[0:2]

>>> squares + [35, 49, 64, 81, 100]

>>> squares = squares + [35, 49, 64, 81, 100]

>>> squares

>>> squares[5] = 36

>>> squares

>>> len(squares)

>>> letters = [’a’, ’b’, ’c’]

>>> mix = squares + letters

>>> mix

>>> mix = [squares, letters]

>>> mix

>>> mix[0][3]

>>> mix[1][2]

Podstawowe struktury danych 11

Skrypty

Program mozna zapisac w postaci skryptu w pliku tekstowym z rozszerzeniem *.py.Np. test.py

squares = [1, 4, 9, 16, 25]

print(squares)

squares = squares + [35, 49, 64, 81, 100]

print(squares)

squares[5] = 36

print(squares)

Skrypt mozna uruchomic poleceniem

$ python3 test.py

Kolejne przykłady beda wykorzystywały te metode zamiast interaktywnej powłoki

Pythona.

Skrypty 12

Instrukcja while

Uwaga - w jezyku Python wciecia definuja bloki kodu. Nalezy uzywac albo spacji, albotabulatorów, ale nie wolno ich mieszac!Dlatego w edytorze gedit warto ustawic w zakładce Preferences->Editor->Tab Stops:

• Tab width: 4

• Insert spaces instead of tabs

• Enable automatic indentation

a = 0

while a < 5:

print(a)

a += 1

a, b = 0, 1

while b < 10:

print(b)

a, b = b, a+b

a, b = 0, 1

while b < 100:

print(b, end=’, ’)

a, b = b, a+b

Instrukcje kontrolne 13

Instrukcja if

x = 3

if x < 0:

x = 0

print(’Negative changed to zero’)

elif x == 0:

print(’Zero’)

elif x == 1:

print(’One’)

else:

print(’More’)

Instrukcje kontrolne 14

Petla for (1)

Petla for porusza sie po liscie lub innej sekwencji z iteratorem

cats = [’natasza’, ’marusia’, ’bolek’, ’lolek’]

for c in cats:

print(c)

Jezeli chcemy dostac ciag arytmetyczny mozemy uzyc funkcji range

for i in range(5):

print(i)

for i in range(5, 10):

print(i)

for i in range(0, 10, 3):

print(i)

for i in range(10, -5, -2):

print(i)

Poniewaz długosc listy zwraca funkcja len, łatwo jest wygenerowac ciag arytmetycznyodpowiadajacy danej liscie elementów

for i in range(len(cats)):

print(i, cats[i])

Instrukcje kontrolne 15

Petla for (2)

W rzeczywistosci range nie generuje listy, tylko iterator

print(range(5))

print(list(range(5)))

W petli for mozemy stosowac polecenia break i continue.

for num in range(2, 10):

if num % 2 == 0:

print("Found an even number", num)

continue

print("Found a number", num)

Polecenie else jest wykonywane tylko jezeli petla nie zostanie przerwana przez break.

for n in range(2, 20):

for x in range(2, n):

if n % x == 0:

print(n, ’equals’, x, ’*’, n//x)

break

else:

print(n, ’is a prime number’)

Instrukcje kontrolne 16

Petla while

Polecenia continue, break, else mozna stosowac w analogiczny sposób takze w petliwhile.

x = 10

n = 7

while x > 0:

if x % n == 0:

print(x, ’is divisible by’, n)

break

x -= 1

else:

print(’while - else’)

Polecenie pass wykonuje pusta instrukcje i moze byc uzyte w miejscach wymaganychprzez składnie (np. jako puste miejse do wypełnienia w przyszłosci.

print(’Press ctrl+c’)

while True:

pass

Instrukcje kontrolne 17

Listy i ich metody (1)

append, extend, insert, remove, pop, index, count, sort, reverse

l = [3, 5, 1]

print(’list’, l)

l.append(9)

print(’append’, l)

l.extend([7, 13])

print(’extend’, l)

l.insert(5, 11)

print(’insert’, l)

l.remove(1)

print(’remove’, l)

print(l.pop())

print(’pop()’, l)

print(l.pop(2))

print(’pop(2)’, l)

print(’5 at position’, l.index(5))

print(’11 appears’, l.count(11), ’times’)

l.sort(reverse=True)

print(’sort, reverse’, l)

l.reverse()

print(’reversed’, l)

Struktury danych 18

Listy i ich metody (2)

copy, clear, del

m = l.copy()

print(’copy’, l, m)

l.clear()

print(’clear’, l, m)

del nie zwraca wartosci i usuwa element (lub zmienna)

del m[0]

print(’del’, m)

del m[0:2]

print(’del’, m)

del m

#print(’del’, m)

Struktury danych 19

Kopiowanie list

l = [1, 2, 3]

m = l

l[0] = 4

print(l, m)

m jest tylko referencja do listy. Aby miec dwie niezalezne listy, musimy zrobic kopie.

m = l.copy()

l[0] = 1

print(l, m)

l = [[0], [0], [0]]

print(l)

m = l.copy()

l[0].append(1)

print(’l = ’, l, ’; m = ’, m)

Ta kopia jest tzw. kopia płytka i nie działa w przypadku zagniezdzonych struktur.Trzeba uzyc kopii głebokiej (o słowie import bedzie pózniej).

import copy

n = copy.deepcopy(l)

l[1].append(1)

print(’l =’, l, ’; m =’, m, ’; n =’, n)

Struktury danych 20

Listy składane

squares = []

for i in range(1, 10):

squares.append(i**2)

print(squares)

To samo tylko szybciej (comprehension list)

squares = [i**2 for i in range(1, 10)]

print(squares)

pairs = [(x, y) for x in range(1, 5) for y in range(1, 5) if x <

y]

print(pairs)

pairs = [[(x, y) for x in range(1, z) for y in range(1, z) if x

< y] for z in range(3, 6)]

for i, p in enumerate(pairs):

print(i, p)

Struktury danych 21

Krotki i zbiory

Krotki (tuple) sa podobne do list, ale sa niezmienne

t = 1, 2, 3

r = (1, 2, 3)

print(t, r)

#t[0] = 0

#r[0] = 0

Zbiory (sets) sa jak zbiory matematyczne (nie moze byc duplikatów)

s = {0, 0, 1, 1, 2, 3}

print(s)

Operator in odpowiada na pytanie o naleznosc do zbioru (takze listy, krotki, itd.)

print(0 in s)

print(’Is in the set’) if 4 in s else print(’Not in the set’)

Struktury danych 22

Słowniki

Słownik (dict) zawiera pary klucz - wartosc (klucz musi byc unikatowy)

d = {’Marek’ : ’2.64’,

’Krzysiek’ : ’2.65’,

’Agnieszka’: ’2.66’

}

print(d)

print(d[’Marek’])

for k, v in d.items():

print(k, v)

Klucz musi byc niezmienny, wiec np. tworzac mape nuklidów (A, Z) musimy uzyc tupli,a nie list jako kluczy.

elements = {0 : ’n’, 1 : ’H’, 2 : ’He’, 3 : ’Li’,

4 : ’Be’, 5 : ’B’, 6 : ’C’ }

nuclides = {}

for z in range(len(elements)):

for a in range(z, 3 * z):

nuclides[(a, z)] = ’{}{}’.format(a, elements[z])

print(nuclides)

print(’sort by key’)

for n in sorted(nuclides.items()):

print(n)

Struktury danych 23

Funkcje (1)

Funkcje tworzy sie za pomoca składni

def pitagoras(a, b):

return (a**2 + b**2)**(1/2)

a woła poprzez

pitagoras(3, 4)

Parametry moga miec nadane domyslne wartosci

def arguments(x, x_max=1, dx=0.1):

while x < x_max:

print(x, x**(1/2))

x += dx

wywołanie moze miec wtedy nastepujace postaci

arguments(0.0)

arguments(0.0, 2.0)

arguments(0.0, dx=0.05)

Funkcje 24

Funkcje (2)

Odzyskiwanie parametrów w postaci listy i słownika

def foo(i, j=1, *arguments, **keywords):

print(’i =’, i)

print(’j =’, j)

print(’arguments’)

for arg in arguments:

print(arg)

print(’keys’)

for key in keywords.keys():

print(key)

print(’values’)

for value in keywords.values():

print(value)

print(’items’)

for item in keywords.items():

print(item)

print(’keys and values’)

for key, value in keywords.items():

print(key, value)

foo(0, 1, 2, 3, a=4, b=5, c=6)

Funkcje 25

Funkcje (3)

Parametr domyslny jest wyznaczany tylko raz i w miejscu deklaracji, co makonsekwencje w pewnych przypadkach

x = 5

def f1(arg=x):

print(x)

x = 6

f1()

def f2(a, l=[]):

l.append(a)

return l

print(f2(0))

print(f2(1))

Funkcje 26

Funkcja anonimowa

Funkcja anonimowa (lambda)

cubic = lambda x: x**3

print(cubic(2))

W szczególnosci mozna ich uzyc przy sortowaniu list czy słowników

for n in sorted(nuclides.items(), key=lambda x: x[0][1] ):

print(n)

Funkcje 27

Dokumentacja

Funkcje (a takze inne elementy) powinno sie opisywac łancuchem dokumentacyjnym(docstring). Python automatycznie obsługuje tak tworzona dokumentacje.

def foo(x):

"""Podnosi parametr x do kwadratu

Bardzo prosta funkcja (bez sensu)

"""

return x**2

print(foo.__doc__)

Dokumentacja 28

Moduły

Moduł to plik z rozszerzeniem *.py zawierajacy funkcje (i klasy), który moznaimportowac i uzywac w innym module.Plik nuclear_masses.py

"""

This module contains various methods of calculating nuclear

masses.

"""

def LDM(A, Z, params=standard_params):

"""Liquid Drop Model"""

pass

def experimental_mass(A, Z, database=’AME2013.dat’):

pass

if __name__ == ’__main__’:

pass

Jezeli wywołamy powyzszy plik jako skrypt, to wykonaja sie polecenia obwarowane

instrukcja if. Jezeli natomiast zaimportujemy do innego skryptu, to ta czesc zostanie

pominieta.

Moduły i pakiety 29

Moduły

Importowanie modułu

import nuclear_masses

nuclear_masses.LDM(10, 20)

Importowanie wybranych funkcji

from nuclear_masses import LDM

LDM(10, 20)

lub wszystkich (zwykle nie uzywane)

from nuclear_masses import *

LDM(10, 20)

Moduły i pakiety 30

Pakiety

Pakiety to moduły, które zawieraja inne moduły (w formie hierarchicznego drzewa)Taki pakiet to np. biblioteka matplotlib słuzaca do tworzenia wykresów. Zwykleimportowany jest tylko moduł pyplot zawierajacy API uzytkownika, ale czasem przydajasie inne elementy, np. moduł pozwalajacy na tworzenie animacji animation.

import matplotlib.pyplot

import matplotlib.animation

matplotlib.pyplot.plot(x, y, ’-’)

matplotlib.animation.FuncAnimation()

Wygodnie jest zamiast długiej nazwy zaimportowac moduł pod skrócona (dowolna)nazwa

import matplotlib.pyplot as plt

import matplotlib.animation as movie

plt.plot(x, y, ’-’)

movie.FuncAnimation()

Moduły i pakiety 31

Pliki

Funkcja open zwraca obiekt powiazany z plikiem, w zaleznosci od trybu otwarcia mozebyc on do odczytu (r), pisania (w, istniejacy plik zostaje skasowany), dopisywania (a),odczytu i zapisu (r+). Dodanie litery b do trybu oznacza tryb binarny, w innymprzypadku jest to tryb tekstowy.

data_file = open(’data.txt’, r)

Funkcja read słuzy do czytania danych, read() wczyta cały plik, read(size) wczyta sizebajtów.

data_file.read(10)

Funkcja readline wczytuje jedna linie tekstu (łacznie ze znakiem konca linii).

data_file.readline()

for line in data_file:

print(line, end=’’)

write słuzy do pisania w pliku, natomiast seek i tell odpowiednio przesuwaja i zwracajapołozenie biezacej pozycji w pliku.

data_file.write(’{} {} {} \n’.format(0, 0, 1)

data_file.seek(10)

data_file.tell()

Operacje I/O 32

Błedy

Prosty program w C++, z drobnym błedem

#include <iostream>

#include <vector>

int main()

{

std::vector<int> v;

if (v > 0)

v.pop_back();

}

i wynik kompilacji (149 linii)

/usr/include/c++/6.3.1/bits/stl_iterator.h:906:5: note:

template argument deduction/substitution failed:

a.cpp:7:13: note: std::vector<int> is not derived from const

__gnu_cxx::__normal_iterator<_Iterator, _Container>

if (v > 0)

^

In file included from /usr/include/c++/6.3.1/bits/stl_algobase.h

:67:0,

from /usr/include/c++/6.3.1/bits/char_traits.h

:39,

from /usr/include/c++/6.3.1/ios:40,

from /usr/include/c++/6.3.1/ostream:38,

from /usr/include/c++/6.3.1/iostream:39,

from a.cpp:1:Wyjatki 33

Błedy w Pythonie

Podobny program

l = [0, 1, 2]

if l > 0:

l.pop()

i próba uruchomienia

Traceback (most recent call last):

File "test.py", line 2, in <module>

if l > 0:

TypeError: ’>’ not supported between instances of ’list’ and ’

int’

Wszelkie błedy sa zwracane w postaci wyjatków (Exception), nalezacych doodpowiednich klas. Powyzej mamy bład typu (TypeError). Program wcale nie musiprzerywac działania w takiej sytuacji, mozliwa jest odpowiednia obsługa wyjatku.

data_file = open(’data.txt’)

counter = 0

for line in data_file:

try:

counter += int(line)

except TypeError:

pass

Wyjatki 34

Programowanie obiektowe

• Podejscie obiektowe jest próba opisu skomplikowanych systemów za pomocaabstrakcji.

Programowanie obiektowe 35

Programowanie obiektowe

• Podejscie obiektowe jest próba opisu skomplikowanych systemów za pomocaabstrakcji.

• Tworzymy obiekty, z którymi sie komunikujemy (i które moga sie komunikowacmiedzy soba), które realizuja zadania dzieki wewnetrznym metodom.

Programowanie obiektowe 35

Programowanie obiektowe

• Podejscie obiektowe jest próba opisu skomplikowanych systemów za pomocaabstrakcji.

• Tworzymy obiekty, z którymi sie komunikujemy (i które moga sie komunikowacmiedzy soba), które realizuja zadania dzieki wewnetrznym metodom.

• Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnymsensie nie interesuje nas jak dany obiekt rozwiaze zadanie, o ile robi to zgodnie zoczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu.

Programowanie obiektowe 35

Programowanie obiektowe

• Podejscie obiektowe jest próba opisu skomplikowanych systemów za pomocaabstrakcji.

• Tworzymy obiekty, z którymi sie komunikujemy (i które moga sie komunikowacmiedzy soba), które realizuja zadania dzieki wewnetrznym metodom.

• Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnymsensie nie interesuje nas jak dany obiekt rozwiaze zadanie, o ile robi to zgodnie zoczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu.

• Kazdy obiekt nalezy do pewnej klasy.

Programowanie obiektowe 35

Programowanie obiektowe

• Podejscie obiektowe jest próba opisu skomplikowanych systemów za pomocaabstrakcji.

• Tworzymy obiekty, z którymi sie komunikujemy (i które moga sie komunikowacmiedzy soba), które realizuja zadania dzieki wewnetrznym metodom.

• Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnymsensie nie interesuje nas jak dany obiekt rozwiaze zadanie, o ile robi to zgodnie zoczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu.

• Kazdy obiekt nalezy do pewnej klasy.

• Kazdy obiekt ma swoje zmienne i procedury.

Programowanie obiektowe 35

Programowanie obiektowe

• Podejscie obiektowe jest próba opisu skomplikowanych systemów za pomocaabstrakcji.

• Tworzymy obiekty, z którymi sie komunikujemy (i które moga sie komunikowacmiedzy soba), które realizuja zadania dzieki wewnetrznym metodom.

• Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnymsensie nie interesuje nas jak dany obiekt rozwiaze zadanie, o ile robi to zgodnie zoczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu.

• Kazdy obiekt nalezy do pewnej klasy.

• Kazdy obiekt ma swoje zmienne i procedury.

• Obiekty mozna ponownie uzywac w innych programach.

Programowanie obiektowe 35

Programowanie obiektowe

• Podejscie obiektowe jest próba opisu skomplikowanych systemów za pomocaabstrakcji.

• Tworzymy obiekty, z którymi sie komunikujemy (i które moga sie komunikowacmiedzy soba), które realizuja zadania dzieki wewnetrznym metodom.

• Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnymsensie nie interesuje nas jak dany obiekt rozwiaze zadanie, o ile robi to zgodnie zoczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu.

• Kazdy obiekt nalezy do pewnej klasy.

• Kazdy obiekt ma swoje zmienne i procedury.

• Obiekty mozna ponownie uzywac w innych programach.

• Wewnetrzna strukture obiektów mozna modyfikowac, uzupełniac i poprawiac, oile nie wpływa to na widziane z zewnatrz własnosci.

Programowanie obiektowe 35

Programowanie obiektowe

• Podejscie obiektowe jest próba opisu skomplikowanych systemów za pomocaabstrakcji.

• Tworzymy obiekty, z którymi sie komunikujemy (i które moga sie komunikowacmiedzy soba), które realizuja zadania dzieki wewnetrznym metodom.

• Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnymsensie nie interesuje nas jak dany obiekt rozwiaze zadanie, o ile robi to zgodnie zoczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu.

• Kazdy obiekt nalezy do pewnej klasy.

• Kazdy obiekt ma swoje zmienne i procedury.

• Obiekty mozna ponownie uzywac w innych programach.

• Wewnetrzna strukture obiektów mozna modyfikowac, uzupełniac i poprawiac, oile nie wpływa to na widziane z zewnatrz własnosci.

• Obiekty moga dziedziczyc (łaczyc sie hierachicznie) po bardziej ogólnych klasach(np. samochód, czy rower jest bardziej szczegółowa realizacja klasy pojazd).

Programowanie obiektowe 35

Programowanie obiektowe

• Podejscie obiektowe jest próba opisu skomplikowanych systemów za pomocaabstrakcji.

• Tworzymy obiekty, z którymi sie komunikujemy (i które moga sie komunikowacmiedzy soba), które realizuja zadania dzieki wewnetrznym metodom.

• Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnymsensie nie interesuje nas jak dany obiekt rozwiaze zadanie, o ile robi to zgodnie zoczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu.

• Kazdy obiekt nalezy do pewnej klasy.

• Kazdy obiekt ma swoje zmienne i procedury.

• Obiekty mozna ponownie uzywac w innych programach.

• Wewnetrzna strukture obiektów mozna modyfikowac, uzupełniac i poprawiac, oile nie wpływa to na widziane z zewnatrz własnosci.

• Obiekty moga dziedziczyc (łaczyc sie hierachicznie) po bardziej ogólnych klasach(np. samochód, czy rower jest bardziej szczegółowa realizacja klasy pojazd).

• Obiekty moga zawierac inne obiekty (np. samochód zawiera koła, czujnikpredkosci itd.).

Programowanie obiektowe 35

Programowanie obiektowe

• Podejscie obiektowe jest próba opisu skomplikowanych systemów za pomocaabstrakcji.

• Tworzymy obiekty, z którymi sie komunikujemy (i które moga sie komunikowacmiedzy soba), które realizuja zadania dzieki wewnetrznym metodom.

• Problem dzielimy na pewne zadania, które przypisujemy obiektom i w pewnymsensie nie interesuje nas jak dany obiekt rozwiaze zadanie, o ile robi to zgodnie zoczekiwaniami. Niepotrzebne informacje sa ukryte wewnatrz obiektu.

• Kazdy obiekt nalezy do pewnej klasy.

• Kazdy obiekt ma swoje zmienne i procedury.

• Obiekty mozna ponownie uzywac w innych programach.

• Wewnetrzna strukture obiektów mozna modyfikowac, uzupełniac i poprawiac, oile nie wpływa to na widziane z zewnatrz własnosci.

• Obiekty moga dziedziczyc (łaczyc sie hierachicznie) po bardziej ogólnych klasach(np. samochód, czy rower jest bardziej szczegółowa realizacja klasy pojazd).

• Obiekty moga zawierac inne obiekty (np. samochód zawiera koła, czujnikpredkosci itd.).

• W Pythonie wszyscy członkowie klasy sa publiczni, a wszystkie funkcje sawirtualne (według terminologii C++).

Programowanie obiektowe 35

Klasy

import math

class Point:

def __init__(self, x, y):

self.x = x

self.y = y

def distance(self, point):

return math.sqrt((self.x - point.x)**2 + (self.y - point.y)**2)

class Circle:

def __init__(self, x, y, r):

self.center = Point(x, y)

self.r = r

def distance_to_perimeter(self, point):

return math.sqrt((self.center.x - point.x)**2 +

(self.center.y - point.y)**2) - self.r

p1 = Point(0, 0)

p2 = Point(1, 2)

c1 = Circle(1, 1, 1)

print(p1.distance(p2))

print(c1.distance_to_perimeter(p2))

print(p1.distance(c1.center))

Programowanie obiektowe 36

Wyjatki - jeszcze raz

Nowe wyjatki mozna tworzyc korzystajac z mechanizmu dziedziczenia. Wszystkiewyjatki dziedzicza po bazowej klasie Exception.

class NuclearError(Exception):

def __init__(self, msg = ’’):

self.msg = msg

def __str__(self):

return self.msg

try:

if temp > temp_max:

raise NuclearError(’Max temp reached’)

except NuclearError as err:

print(err)

Programowanie obiektowe 37

Krótki przeglad bibloteki standardowej (1)

• argparse - interfejs linii polecen (parametry)

• datetime - operacje zwiazane z czasem i kalendarzem

• dbm - interfejs baz danych DBM

• distutils - narzedzia do instalowania i tworzenia pakietów Pythona

• doctest - testowanie dokumentacji

• email

• html

• http

• math - funkcje matematyczne

• multiprocessing - przetwarzanie wielowatkowe

• os - interakcje z systemem operacyjnym

• cProfile - narzedzia do optymalizacji programów

Biblioteka standardowa 38

Krótki przeglad bibloteki standardowej (2)

• random - generatory liczb losowych (płaski, Gauss)

• re - wyrazenia regularne

• smtpd - serwer SMTP

• smtplib - klient SMTP

• socketserver - operacje sieciowe niskiego poziomu

• ssl - OpenSSL

• sqlite3 - interfejs bazy danych SQLite

• timeit - pomiary wydajnosci programu

• tkinter - Tk GUI

• unittest - testowanie programu

• xml

• zipfile

Biblioteka standardowa 39

Inne przydatne biblioteki

• numpy - numerical Python

• matplotlib

• scipy - scientific Python

• QtPy

• lmfit

Ciekawostki

• SymPy - obliczenia symboliczne

• Biopython

• PyChem -

• astropy -

Biblioteka standardowa 40