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

49
Wprowadzenie do Pythona Krzysztof Miernik 1

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

Page 1: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

Wprowadzenie do Pythona

Krzysztof Miernik

1

Page 2: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 3: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

Python, a inne jezyki

Dlaczego Python? 3

Page 4: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

Dlaczego Python?

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

Python

C++

Dlaczego Python? 4

Page 5: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

Dlaczego Python?

Nature 518, 7537 (2015)

Dlaczego Python? 5

Page 6: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 7: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 8: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

Ł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

Page 9: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

Ł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

Page 10: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

Ł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

Page 11: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 12: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 13: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 14: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 15: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 16: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 17: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 18: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 19: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 20: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 21: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 22: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 23: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 24: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 25: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 26: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 27: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 28: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 29: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 30: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 31: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 32: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 33: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 34: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 35: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

Programowanie obiektowe

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

Programowanie obiektowe 35

Page 36: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 37: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 38: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 39: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 40: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 41: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 42: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 43: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 44: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 45: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 46: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 47: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 48: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

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

Page 49: Wprowadzenie do Pythonakmiernik/docs/python.pdf · 2019-09-27 · Polecenie pass wykonuje pusta˛instrukcje˛ i mo˙ze by ´c u zyte w miejscach wymaganych˙ przez składnie˛ (np.

Inne przydatne biblioteki

• numpy - numerical Python

• matplotlib

• scipy - scientific Python

• QtPy

• lmfit

Ciekawostki

• SymPy - obliczenia symboliczne

• Biopython

• PyChem -

• astropy -

Biblioteka standardowa 40