Programowanie w jezykach skryptowych - Python i Linux Bash

80
Programowanie w j˛ ezykach skryptowych - Python i Linux Bash Maciej Wielgosz Wydzial Informatyki, Elektroniki i Telekomunikacji 2015, semestr zimowy M. Wielgosz (AGH - IET) Programowanie w j˛ ezykach skryptowych - Python i Linux Bash 2015 1 / 80

Transcript of Programowanie w jezykach skryptowych - Python i Linux Bash

Page 1: Programowanie w jezykach skryptowych - Python i Linux Bash

Programowanie w jezykachskryptowych - Python i Linux Bash

Maciej Wielgosz

Wydział Informatyki, Elektroniki i Telekomunikacji

2015, semestr zimowy

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 1 / 80

Page 2: Programowanie w jezykach skryptowych - Python i Linux Bash

Czesc III

Python

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 2 / 80

Page 3: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 3 / 80

Page 4: Programowanie w jezykach skryptowych - Python i Linux Bash

Python - cechy jezyka

z interpretowanyz interaktywnyz obiektowo-zorientowany

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 4 / 80

Page 5: Programowanie w jezykach skryptowych - Python i Linux Bash

Python - cechy jezyka

z prostotaz przejrzystoscz łatwosc wykonywania złozonych operacjiz wygodna diagnostyka błedówz ogromny ekosystem modułów dla najrózniejszych zastosowanz łatwosc łaczenia z kodem w innych jezykachz skalowalnoscz przenosnosc

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 5 / 80

Page 6: Programowanie w jezykach skryptowych - Python i Linux Bash

Standardy

z 1.0 (1994)z 2.0 (2000)z 3.0 (2008)z 3.4 (2014)

KompatybilnoscOd wersji 3.0 zerwano z wymogiem wstecznej kompatybilnosci.Narzedzie 2to3 pozwala wykonac wiekszosc translacji.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 6 / 80

Page 7: Programowanie w jezykach skryptowych - Python i Linux Bash

Uruchamianie

z python3.4z python3.4 test.py

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 7 / 80

Page 8: Programowanie w jezykach skryptowych - Python i Linux Bash

Tryb interaktywny

#python3.4Python 3.4.0 (default, Apr 11 2014, 13:05:11)[GCC 4.8.2] on linuxType "help", "copyright", "credits" or "license"for more information.>>> help()help> inputHelp on built-in function input in module builtins:...help> quit>>> quit()

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 8 / 80

Page 9: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 9 / 80

Page 10: Programowanie w jezykach skryptowych - Python i Linux Bash

Identyfikatory

z zbudowane z liter, cyfr i znaku podkresleniaz zaczynaja sie od litery lub znaku podkresleniaz małe i wielkie litery sa odróznianez konwencja: nazwy klas zaczynaja sie od wielkiej litery, zmienne

od małejz istnieje zestaw zarezerwowanych słów kluczowych

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 10 / 80

Page 11: Programowanie w jezykach skryptowych - Python i Linux Bash

Linie

1 total = item_one + \2 item_two + \3 item_three4

5 months = [’March’, ’April’, ’May’,6 ’June’, ’July’]7

8 import sys; x = ’foo’; sys.stdout.write(x + ’\n’)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 11 / 80

Page 12: Programowanie w jezykach skryptowych - Python i Linux Bash

Indentacja

1 if len(filename) == 0:2 print("Empty filename")3 sys.exit()4 try:5 file = open(filename, "r")6 except IOError:7 print("Error opening file")8 sys.exit()

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 12 / 80

Page 13: Programowanie w jezykach skryptowych - Python i Linux Bash

Drobiazgi

z komentarze

1 # komentarz2 print(’Hello’); ala = 7; print(ala) #

↪→ komentarz3 ’’’4 Napis pełniacy role5 wielolinijkowego6 komentarza7 ’’’

z interakcja z uzytkownikiem

1 x = int(input())

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 13 / 80

Page 14: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 14 / 80

Page 15: Programowanie w jezykach skryptowych - Python i Linux Bash

Typizacja

Zmienna jest tworzona w chwili przypisania wartosci, typ zmiennej jestustalany dynamicznie.

1 >>> x = ’Ala’2 >>> type(x)3 <class ’str’>4 >>> x = 75 >>> type(x)6 <class ’int’>7 >>> x = str(x)8 >>> type(x)9 <class ’str’>

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 15 / 80

Page 16: Programowanie w jezykach skryptowych - Python i Linux Bash

Podstawowe typy

z liczby: 2, -3, 1.56

z napisy: ’hello’, ’’tekst’’

z listy: [1, 2, 3], [’ala’, ’ola’, ’ela’], [1, ’ola’]

z krotki:(1,2,3), (’ala’, ’ola’, ’ela’), (1, [’ola’]), (2,)

z słowniki: { ’ala’: ’kot’, ’ola’: 1 }

z typ boolowski: True, False

z nic: None

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 16 / 80

Page 17: Programowanie w jezykach skryptowych - Python i Linux Bash

Liczby

1 >>> 2 + 32 53 >>> 9 / 54 1.85 >>> 9 // 56 17 >>> 9 % 58 49 >>> 6 ** 2

10 3611 >>> a = 2012 >>> a13 20

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 17 / 80

Page 18: Programowanie w jezykach skryptowych - Python i Linux Bash

Napisy

1 >>> ’do it’2 ’do it’3 >>> ’doesn\’t’4 "doesn’t"5 >>> "doesn’t"6 "doesn’t"7 >>> ’"Yes," she said.’8 ’"Yes," she said.’9 >>> "\"Yes,\" she said."

10 ’"Yes," she said.’

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 18 / 80

Page 19: Programowanie w jezykach skryptowych - Python i Linux Bash

Napisy

1 >>> s = ’Pierwszy wiersz.\nDrugi wiersz.’2 >>> s # bez funkcji print()3 ’Pierwszy wiersz.\nDrugi wiersz.’4 >>> print(s) # print()5 Pierwszy wiersz.6 Drugi wiersz.7

8 >>> print(’C:\Dokumenty\nina’)9 C:\Dokumenty

10 ina11 >>> print(’C:\Dokumenty\\nina’)12 C:\Dokumenty\nina13 >>> print(r’C:\Dokumenty\nina’)14 C:\Dokumenty\nina

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 19 / 80

Page 20: Programowanie w jezykach skryptowych - Python i Linux Bash

Napisy

1 >>> 2 * ’la’ + ’mido’2 ’lalamido’3 >>> ’Py’ ’thon’4 ’Python’5 >>> prefix = ’Py’6 >>> prefix + ’thon’7 ’Python’8 >>> w = ’Python’9 >>> w[0]

10 ’P’11 >>> w[5]12 ’n’13 >>> w[-2]14 ’o’

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 20 / 80

Page 21: Programowanie w jezykach skryptowych - Python i Linux Bash

Napisy

1 >>> w[2:5]2 ’tho’3 >>> w[:2]4 ’Py’5 >>> w[4:]6 ’on’7 >>> len(w)8 6

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 21 / 80

Page 22: Programowanie w jezykach skryptowych - Python i Linux Bash

Listy1 >>> szesciany = [1, 8, 27, 64, 125]2 >>> szesciany[1]3 84 >>> szesciany[-3:]5 [27, 64, 125]6 >>> szesciany[:]7 [1, 8, 27, 64, 125]8 >>> szesciany + [216, 343]9 >>> szesciany.append(512)

10 >>> szesciany11 [1, 8, 27, 64, 125, 512]12 >>> a = [’a’, ’b’, ’c’]13 >>> b = [1, 2]14 >>> c = [a, b]15 >>> c16 [[’a’, ’b’, ’c’], [1, 2]]

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 22 / 80

Page 23: Programowanie w jezykach skryptowych - Python i Linux Bash

Listy - dodawanie elementów

1 >>> list = [’a’]2 >>> list = list + [2.0, 5]3 >>> list4 [’a’, 2.0, 5]5 >>> list.append([True, ’c’])6 >>> list7 [’a’, 2.0, 3, [True, ’c’]]8 >>> list.extend([’b’, ’d’])9 >>> list

10 [’a’, 2.0, 3, [True, ’c’], ’b’, ’d’]11 >>> list.insert(1, ’d’)12 >>> list13 [’a’, ’d’, 2.0, 3, [True, ’c’], ’b’, ’d’]

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 23 / 80

Page 24: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 24 / 80

Page 25: Programowanie w jezykach skryptowych - Python i Linux Bash

Operatory

z arytmetyczne: +, -, *, /, %, **, //

z porównania: ==, !=, <>, >, <, >=, <=

z przypisania: =, += . . .z bitowez logiczne: and, or, not

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 25 / 80

Page 26: Programowanie w jezykach skryptowych - Python i Linux Bash

if

1 if punkty >= 90:2 ocena = ’5’3 elif punkty >= 75:4 ocena = ’4’5 elif punkty >= 60:6 ocena = ’3’7 else:8 ocena = ’2’

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 26 / 80

Page 27: Programowanie w jezykach skryptowych - Python i Linux Bash

for

1 for litera in ’Python’:2 print(’litera:’, litera)3

4 warzywa = [’marchew’, ’kalafior’, ’kapusta’]5 for warzywo in warzywa:6 print(’warzywo:’, warzywo)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 27 / 80

Page 28: Programowanie w jezykach skryptowych - Python i Linux Bash

range()

1 for i in range(5):2 print(i)3 # 0 1 2 3 4

1 for i in range(2, 11, 2):2 print(i)3 # 2 4 6 8 10

1 print(list(range(2, 11, 2)))2 # [2, 4, 6, 8, 10]

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 28 / 80

Page 29: Programowanie w jezykach skryptowych - Python i Linux Bash

while1 liczby = list()2 i = 23 while i < 11:4 liczby.append(i)5 i = i + 26 print(liczby) # [2, 4, 6, 8, 10]

1 lines = list()2 print(’Wprowadz tekst po linijce.’)3 print(’Zeby zakonczyc wprowadz pusta linie.’)4 line = input(’Nastepna linijka: ’)5 while line != ’’:6 lines.append(line)7 line = input(’Nastepna linijka: ’) # reset8 print(lines)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 29 / 80

Page 30: Programowanie w jezykach skryptowych - Python i Linux Bash

break, else, continue

1 for n in range(2, 100):2 for x in range(2, n):3 if n % x == 0:4 break5 else: # normalny koniec petli6 print(n, ’jest liczba pierwsza’)

1 for num in range(1, 20):2 if not num % 2:3 print(’Kolejna liczba parzysta:’, num)4 continue5 print(’Kolejna liczba:’, num)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 30 / 80

Page 31: Programowanie w jezykach skryptowych - Python i Linux Bash

pass

1 while True:2 pass # aktywne oczekiwanie

1 class minimalClass:2 pass

1 def function_to_implement(*args)2 pass

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 31 / 80

Page 32: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 32 / 80

Page 33: Programowanie w jezykach skryptowych - Python i Linux Bash

Definicja

1 def fib2(n):2 ’’’ zwraca liczby Fibonacciego mniejsze od n

↪→ ’’’3 wynik = []4 a, b = 0, 15 while a < n:6 wynik.append(a)7 a, b = b, a+b8 return wynik9

10 x = fib2(10)11 print(x)12 print(fib2.__doc__)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 33 / 80

Page 34: Programowanie w jezykach skryptowych - Python i Linux Bash

Argumenty domyslne

1 def f(a, L=[]):2 L.append(a)3 return L4 print(f(1)) # [1]5 print(f(2)) # [1, 2]6

7 def f(a, L=None):8 if L is None:9 L = []

10 L.append(a)11 return L12 print(f(1)) # [1]13 print(f(2)) # [2]

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 34 / 80

Page 35: Programowanie w jezykach skryptowych - Python i Linux Bash

Przekazywanie argumentów

1 def evilGetLength(ilist):2 length = len(ilist)3 del ilist[:] # usuniecie zawartosci4 return length5

6 list1 = [1, 2]7 length = evilGetLength(list1) # list1 jest pusta8 list1 = [1, 2]9 length = evilGetLength(list1[:]) # przekazanie

↪→ kopii10

11 def f(a, b):12 return a - b13

14 c = f(b=4, a=2)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 35 / 80

Page 36: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 36 / 80

Page 37: Programowanie w jezykach skryptowych - Python i Linux Bash

Lista - operacje

1 list.append(x) # dołacza x2 list.extend(L) # dołacza liste L3 list.insert(i, x) # wstawia x przed pozycje i4 list.remove(x) # usuwa pierwszy x5 list.pop(i) # usuwa i-ty element6 list.pop # usuwa ostatni element7 list.clear() # usuwa wszystkie elementy8 list.index(x) # indeks pierwszego x9 list.count(x) # liczba wystapien x

10 list.sort() # sortuje w miejscu11 list.reverse() # odwraca w miejscu12 list.copy() # zwraca kopie

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 37 / 80

Page 38: Programowanie w jezykach skryptowych - Python i Linux Bash

Stos na liscie

1 stack = [0, 1, 2]2 stack.append(4)3 stack.append(5) # [0, 1, 2, 4, 5]4 stack.pop()5 stack.pop()6 stack.pop() # [0, 1]

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 38 / 80

Page 39: Programowanie w jezykach skryptowych - Python i Linux Bash

Kolejka

Implementacja przy uzyciu listy jest niewydajna: wolne operacjepobierania z poczatku.

1 from collections import deque2 queue = deque([0, 1, 2])3 queue.append(4)4 queue.append(5) # [0, 1, 2, 4, 5]5 queue.popleft()6 queue.popleft()7 queue.popleft() # [4, 5]

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 39 / 80

Page 40: Programowanie w jezykach skryptowych - Python i Linux Bash

del

1 a = [-1, 0, 2, 7, -5, 11]2 del a[0] # [0, 2, 7, -5, 11]3 del a[1:3] # [0, -5, 11]4 del a[:] # []5 del a # usuwa liste, a nie tylko jej zawartosc

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 40 / 80

Page 41: Programowanie w jezykach skryptowych - Python i Linux Bash

Listy składane

1 szesciany = []2 for x in range(10):3 szesciany.append(x**3)4

5 szesciany = [x**3 for x in range(10)]6

7 a = [-4, -2, 0, 2, 4]8 b = [x for x in a if x > 0]

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 41 / 80

Page 42: Programowanie w jezykach skryptowych - Python i Linux Bash

Krotki

1 t = 1, 5, ’ala’ # (1, 5, ’ala’)2 a = t[0] # 13 nt = t, (6, 7) # ((1, 5, ’ala’), (6, 7))4 t[1] = 3 # bład, krotki nie mozna modyfikowac5 empty = () # krotka 0-elementowa6 singleton = 4, # krotka 1-elementowa7 singleton = (4,) # to samo8 x, y, z = t # rozpakowanie krotki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 42 / 80

Page 43: Programowanie w jezykach skryptowych - Python i Linux Bash

Zbiory

1 basket = set() # pusty zbiór2 basket = {’apple’, ’orange’, ’apple’, ’pear’}3 # {’apple’, ’orange’, ’pear’}4 a = set(’abracadabra’)5 b = set(’alacazam’)6 c = a - b # {’r’, ’d’, ’b’}7 c = a | b # {’a’, ’c’, ’r’, ’d’, ’b’, ’m’, ’z’,

↪→ ’l’}8 c = a & b # {’a’, ’c’}9 c = a ^ b # {’r’, ’d’, ’b’, ’m’, ’z’, ’l’}

10 c = {x for x in ’abracadabra’ if x not in ’abc’}11 # {’r’, ’d’}

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 43 / 80

Page 44: Programowanie w jezykach skryptowych - Python i Linux Bash

Słowniki

1 tel = {} # pusty słownik2 tel = {’Maja’: 4098, ’Jan’: 4139}3 tel[’Basia’] = 41274 del tel[’Maja’]5 tel = dict([(’Jan’, 4139), (’Jurek’, 4127)])6 c = {x: x**2 for x in (2, 4, 6)}7 # {2: 4, 4: 16, 6: 36}

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 44 / 80

Page 45: Programowanie w jezykach skryptowych - Python i Linux Bash

Petle z wykorzystaniem wbudowanych struktur

1 tel = {’Jan’: ’4563’, ’Zbigniew’: ’4651’}2 for k, v in tel.items():3 print(k, v)4

5 for i, v in enumerate([’raz’, ’dwa’, ’trzy’]):6 print(i, v)7

8 for i in reversed(range(1, 10, 2)):9 print(i)

10

11 warzywa = [’kapusta’, ’fasola’, ’groch’,↪→ ’kapusta’]

12 for f in sorted(set(warzywa)):13 print(f)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 45 / 80

Page 46: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 46 / 80

Page 47: Programowanie w jezykach skryptowych - Python i Linux Bash

Wyrazenia lambda

1 def add(a, b):2 return a + b3

4 print((lambda a, b: a + b)(4, 3))5

6 pairs = [(1, ’one’), (2, ’two’), (3, ’three’),↪→ (4, ’four’)]

7 pairs.sort(key=lambda pair: pair[1])8 # [(4, ’four’), (1, ’one’), (3, ’three’), (2,

↪→ ’two’)]

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 47 / 80

Page 48: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 48 / 80

Page 49: Programowanie w jezykach skryptowych - Python i Linux Bash

Definicja klasy

1 class Complex:2 def __init__(self, realpart, imagpart):3 self.r = realpart4 self.i = imagpart5 def conjugate(self):6 self.i = -self.i7

8 x = Complex(2.0, -1.0)9 a = x.r # 2.0

10 b = x.i # -1.011 x.conjugate()12 print(x.i) # 1.0

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 49 / 80

Page 50: Programowanie w jezykach skryptowych - Python i Linux Bash

Obiekty i metody

1 class Pies:2 rodzina = ’Psowate’ # składowa klasy3 def __init__(self, rasa):4 self.rasa = rasa # składowa obiektu5 def f(self):6 return ’hau hau’7

8 a = Pies(’jamnik’)9 b = Pies(’buldog’)

10 print(a.rasa) # ’jamnik’11 print(b.rodzina) # ’Psowate’12 a.wiek = 813 print(a.wiek)14 del a.wiek

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 50 / 80

Page 51: Programowanie w jezykach skryptowych - Python i Linux Bash

Dziedziczenie

1 class KlasaPochodna(KlasaBazowa):2 <instrukcja-1>3 ...4 <instrukcja-N>5

6 class KlasaPochodna(KlasaBazowa1, KlasaBazowa2):7 <instrukcja-1>8 ...9 <instrukcja-N>

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 51 / 80

Page 52: Programowanie w jezykach skryptowych - Python i Linux Bash

Dziedziczenie

z wywołanie konstruktora klasy bazowej,z przeciazanie (redefinicja) metod klasy bazowej w klasie

pochodnej,z definicja nowych pól oraz metod.

1 class KlasaPochodna(KlasaBazowa):2

3 def __init__(self):4 KlasaBazowa.__init__(self, ....)5

6 <instrukcja-1>7 ...8 <instrukcja-N>

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 52 / 80

Page 53: Programowanie w jezykach skryptowych - Python i Linux Bash

Metody statyczne

z metoda nie jest przywiazywana do obiektu tylko do klasy,z uzywany jest dekorator @staticmethod.

1 class Elektronia:2 @staticmethod3 def oblicz_moc(ilosc_maszyn):4 return ilosc_maszyn * 5

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 53 / 80

Page 54: Programowanie w jezykach skryptowych - Python i Linux Bash

Klasy oraz metody abstrakcyjne

1 class AbstrakcyjnaKlasa:2 def metoda_abstrakcyjna(self):3 raise NotImplementedError

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 54 / 80

Page 55: Programowanie w jezykach skryptowych - Python i Linux Bash

Prywatne składowe

Prywatne składowe nie istnieja, ale ma miejsce dekorowanie nazw:__var → _classname__var

1 class Mapping:2 def __init__(self, iterable):3 self.items_list = []4 self.__update(iterable)5 def update(self, iterable):6 for item in iterable:7 self.items_list.append(item)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 55 / 80

Page 56: Programowanie w jezykach skryptowych - Python i Linux Bash

Puste klasy

1 class Osoba:2 pass3

4 a = Osoba() # Pusty rekord5

6 # Dodawanie pól7 a.imie = ’Jan’8 a.nazwisko = ’Kowalski’9 a.wiek = 26

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 56 / 80

Page 57: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 57 / 80

Page 58: Programowanie w jezykach skryptowych - Python i Linux Bash

Iteratory

1 class Counter:2 def __init__(self, low, high):3 self.current = low4 self.high = high5

6 def __iter__(self):7 return self8

9 def __next__(self):10 if self.current > self.high:11 raise StopIteration12 else:13 self.current += 114 return self.current - 1

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 58 / 80

Page 59: Programowanie w jezykach skryptowych - Python i Linux Bash

Iteratory

1 c = Counter(5,10)2 for i in c:3 print(i)4 ...5 5 6 7 8 9 10

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 59 / 80

Page 60: Programowanie w jezykach skryptowych - Python i Linux Bash

Iteratory

Iteratory:

z moga operowac na nieskonczonych ciagach,z oszczedzaja zasoby, mozliwe jest pobranie kolejnego elementu

bez koniecznosci przechowywanie wszystkiego w pamieci.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 60 / 80

Page 61: Programowanie w jezykach skryptowych - Python i Linux Bash

Generatory

1 def counter_generator(low, high):2 while low <= high:3 yield low4 low += 15

6 for i in counter_generator(5,10):7 ... print(i)8 ...9 5 6 7 8 9 10

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 61 / 80

Page 62: Programowanie w jezykach skryptowych - Python i Linux Bash

Generatory

1 def r_list():2 result = []3 for i in range(10000):4 result.append(i)5 return result6

7 def i_list():8 for i in range(10000):9 yield i

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 62 / 80

Page 63: Programowanie w jezykach skryptowych - Python i Linux Bash

Wyrazenia generatorowe

1 time x = l_list() - > 2.81 ms2 time x = i_list() - > 296 us

Implementacja generatorowa jest ok. 10 razy szybsza niz tablicowa.

1 x = list(x)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 63 / 80

Page 64: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 64 / 80

Page 65: Programowanie w jezykach skryptowych - Python i Linux Bash

Konwersja wartosci na napisy

1 >>> s = ’Hello’2 >>> str(s)3 ’Hello’4 >>> repr(s)5 "’Hello’"6 >>> str(1/13)7 ’0.07692307692307693’8 >>> x = 11 * 3.29 >>> s = ’x to ’ + repr(x)

10 >>> print(s)11 x to 35.212 >>> powitanie = ’Hello\n’13 >>> pwt = repr(powitanie)14 >>> print(pwt)15 ’Hello\n’

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 65 / 80

Page 66: Programowanie w jezykach skryptowych - Python i Linux Bash

Formatowanie napisów

1 >>> for x in range(1, 7):2 ... print(repr(x).rjust(2),

↪→ repr(x*x).rjust(3), end=’ ’)3 ... print(repr(x*x*x).rjust(4))4 ...5 1 1 16 2 4 87 3 9 278 4 16 649 5 25 125

10 6 36 216

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 66 / 80

Page 67: Programowanie w jezykach skryptowych - Python i Linux Bash

Formatowanie napisów

1 >>> for x in range(1, 7):2 ... print(’{0:2} {1:3} {2:4}’.format(x, x*x,

↪→ x*x*x))3 ...4 1 1 15 2 4 86 3 9 277 4 16 648 5 25 1259 6 36 216

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 67 / 80

Page 68: Programowanie w jezykach skryptowych - Python i Linux Bash

Formatowanie napisów

1 >>> print(’{} wykrzyknał "{}!"’.format(’Jan’,↪→ ’Nie’))

2 Jan wykrzyknał "Nie!"3 >>> print(’{1} i {0}’.format(’kwadraty’,

↪→ ’trójkaty’))4 trójkaty i kwadraty

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 68 / 80

Page 69: Programowanie w jezykach skryptowych - Python i Linux Bash

Operacje na plikach

1 >>> f = open(’write_file_name’, ’w’)2 >>> f = open(’append_file_name’, ’a’)3 >>> f = open(’read_file_name’, ’r’)4 >>> f.read()5 ’Pierwszy wiersz\nDrugi wiersz\n\n’6 >>> f.readline()7 ’Pierwszy wiersz\n’8 >>> f.readline()9 ’Drugi wiersz\n’

10 >>> f.readline()11 ’\n’12 >>> f.readline()13 ’’

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 69 / 80

Page 70: Programowanie w jezykach skryptowych - Python i Linux Bash

Operacje na plikach

1 >>> f.readlines()2 [’Pierwszy wiersz\n’, ’Drugi wiersz\n’, ’\n’]3

4 >>> t = f.readlines()5

6 >>> for line in t:7 ... print(line, end=’’)8 ...9 Pierwszy wiersz

10 Drugi wiersz

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 70 / 80

Page 71: Programowanie w jezykach skryptowych - Python i Linux Bash

Operacje na plikach

1 >>> f.write(’Hello\n’)2 >>> value = 423 >>> f.write(value)4 Traceback (most recent call last):5 File "<stdin>", line 1, in <module>6 TypeError: must be str, not int7 >>> s = str(value)8 >>> f.write(s)9

10 >>> f.seek(0) # na poczatek11 >>> f.seek(0, 2) # na koniec

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 71 / 80

Page 72: Programowanie w jezykach skryptowych - Python i Linux Bash

Operacje na plikach binarnych

1 >>> f = open(’workfile’, ’rb+’)2 >>> f.write(b’0123456789abcdef’)3 164 >>> f.seek(5) # do 6-go bajtu5 56 >>> f.read(1)7 b’5’8 >>> f.seek(-3, 2) # do 3-go bajtu od konca9 13

10 >>> f.read(1)11 b’d’12 >>> f.close()

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 72 / 80

Page 73: Programowanie w jezykach skryptowych - Python i Linux Bash

Automatyczne zamykanie pliku

1 >>> with open(’/tmp/workfile’, ’r’, encoding =↪→ ’utf-8’) as f:

2 ... read_data = f.read()3 >>> f.closed4 True

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 73 / 80

Page 74: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 74 / 80

Page 75: Programowanie w jezykach skryptowych - Python i Linux Bash

Błedy składniowe

1 >>> while True print(’Hello’)2 File "<stdin>", line 13 while True print(’Hello’)4 ^5 SyntaxError: invalid syntax

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 75 / 80

Page 76: Programowanie w jezykach skryptowych - Python i Linux Bash

Python

1 Cechy jezyka2 Składnia3 Typy zmiennych4 Instrukcje sterujace5 Funkcje6 Wbudowane struktury danych

7 Funkcje raz jeszcze8 Programowanie obiektowe9 Iteratory i generatory

10 Wejscie i wyjscie11 Obsługa błedów12 Wyjatki

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 76 / 80

Page 77: Programowanie w jezykach skryptowych - Python i Linux Bash

Wyjatki

1 >>> 5 * (1/0)2 Traceback (most recent call last):3 File "<stdin>", line 1, in <module>4 ZeroDivisionError: division by zero5 >>> 4 + x*36 Traceback (most recent call last):7 File "<stdin>", line 1, in <module>8 NameError: name ’x’ is not defined9 >>> ’2’ + 2

10 Traceback (most recent call last):11 File "<stdin>", line 1, in <module>12 TypeError: Can’t convert ’int’ object to str

↪→ implicitly

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 77 / 80

Page 78: Programowanie w jezykach skryptowych - Python i Linux Bash

Obsługa

1 import sys2 try:3 f = open(’plik.txt’)4 s = f.readline()5 i = int(s.strip())6 except OSError as err:7 print("Bład systemu: {0}".format(err))8 except ValueError:9 print("Nie mozna dokonac konwersji.")

10 except:11 print("Nieoczekiwany wyjatek:",

↪→ sys.exc_info()[0])12 raise

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 78 / 80

Page 79: Programowanie w jezykach skryptowych - Python i Linux Bash

finally

1 def divide(a, b):2 try:3 c = a / b4 except ZeroDivisionError:5 print(’Próba dzielenia przez zero’)6 finally:7 print(’Wykonanie klauzuli finally’)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 79 / 80

Page 80: Programowanie w jezykach skryptowych - Python i Linux Bash

i wszystko razem

1 try:2 operation_that_can_throw_ioerror()3 except IOError:4 handle_the_exception_somehow()5 finally:6 something_we_always_need_to_do()

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 80 / 80