Upload
vuliem
View
248
Download
1
Embed Size (px)
Citation preview
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
Czesc III
Python
M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 2 / 80
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
Python - cechy jezyka
z interpretowanyz interaktywnyz obiektowo-zorientowany
M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 4 / 80
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
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
Uruchamianie
z python3.4z python3.4 test.py
M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 7 / 80
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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