JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ]

Podobne dokumenty
Kurs rozszerzony języka Python

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Wstęp do programowania

Zaawansowany kurs języka Python

Python i programowanie funkcyjne. Python i programowanie funkcyjne czyli nie tylko obiektowość rządzi. OSEC Funkcyjnie w języku Python 1 z 40

Programowanie funkcyjne w Pythonie

Programowanie obiektowe

Programowanie obiektowe

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Programowanie obiektowe

Programowanie i projektowanie obiektowe

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Programowanie i projektowanie obiektowe

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Programowanie obiektowe

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

JĘZYK PYTHON NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Dr Marcin Lewandowski [ mlew@ippt.pan.pl ] Strona kursu:

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Programowanie obiektowe

Platformy Programistyczne Podstawy języka Java

Python! Lekcja 1 podstawy języka, typy danych

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Wykład 2 Programowanie zorientowane obiektowo w Pythonie

Technologie i usługi internetowe cz. 2

SWIFT. Zaawansowane Programowanie Obiektowe

Środowisko programisty

Wstęp do ruby dla programistów javy

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie 2. Język C++. Wykład 3.

Python. Skąd taka nazwa? Kurs systemu UNIX 1

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie obiektowe

Wstęp do programowania

PARADYGMATY PROGRAMOWANIA Wykład 3

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie i projektowanie obiektowe

Zaawansowany kurs języka Python

Przegląd języka Python. Łukasz Anwajler

Technologie cyfrowe semestr letni 2018/2019

Oracle PL/SQL. Paweł Rajba.

Wprowadzenie do Objective-C

Python wstęp do programowania dla użytkowników WCSS

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Programowanie Obiektowe i C++

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Wstęp do Programowania potok funkcyjny

Język Python (3) Język Python (3) 1/35

Wstęp do programowania

Zaawansowany kurs języka Python

Dziedziczenie. dr Jarosław Skaruz


Kurs WWW. Paweł Rajba.

Podstawy. Jan Koprowski Politechnika Gdańska, FTiMS Informatyka Stosowana

KOTLIN. Język programowania dla Androida

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Definicje wyższego poziomu

Programowanie, część I

Algorytmy i Struktury Danych. Anna Paszyńska

Paradygmaty programowania

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

TEMAT : KLASY DZIEDZICZENIE

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Podstawy bioinformatyki 2017/18

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

PROGRAMOWANIE W ŚRODOWISKU FLASH wykład 2

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Technologie cyfrowe semestr letni 2018/2019

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie obiektowe - 1.

Algorytmy i struktury danych

Języki i metody programowania

Programowanie i projektowanie obiektowe

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wykład 2 Składnia języka C# (cz. 1)

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Koło Studentów Informatyki Uniwersytetu Wrocławskiego

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Podstawy programowania skrót z wykładów:

Zaawansowany kurs języka Python

Python. Wprowadzenie. Jolanta Bachan

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Wstęp do programowania

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Programowanie obiektowe

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Programowanie Obiektowe i C++

Programowanie obiektowe

Transkrypt:

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA Marcin Lewandowski [ mlew@ippt.gov.pl ]

PROGRAMOWANIE FUNKCYJNE I OBIEKTOWE W PYTHONIE 2

PROGRAMOWANIE FUNKCYJNE 3

Źródła Programowanie funkcyjne (wykład MIMUW) http://wazniak.mimuw.edu.pl/index.php?title =Programowanie_funkcyjne M.L. Scott, Programming Language Pragmatics, Morgan Kaufmann, 3 ed., 2009 Charming Python installments http://gnosis.cx/publish/tech_index_cp.html 4

Paradygmaty programowania Proceduralne/Imperatywne operacje wykonywane na danych (operacje zmieniają stan programu) Obiektowe opis interakcji pomiędzy obiektami Funkcyjne program jako funkcja 5

Imperatywne vs. Funkcyjne Cecha Imperatywne Funkcyjne Konstrukcja algorytmu Jakie instrukcje wykonad (algorytm) i jak zmieniad stan programu Zmiana/Stan programu Ważny Nie istnieje Kolejnośd wykonywania Ważna Jakie transformacje danych są potrzebne Mało ważna Przepływ sterowania Pętle, warunki i funkcje Funkcje, rekurencja Podstawowe elementy języka Struktury danych, instancje klas Funkcje jako obiekty firstclass, kolekcje danych (listy) 6

Konstrukcje programowania funkcyjnego w Pythonie Funkcje jako obiekty podstawowe (tzw. first-class) lambda, przekazywanie funkcji jako argument Domknięcia (ang. Closures) funkcje związane z damymi Funkcje operujące na funkcjach (ang. high-order functions) Dekoratory forma opakowao (wrapperów) dla funkcji Iteratory i Generatory Listy jako podstawowa struktura danych (List Comprehensions) 7

Lambda Lambda proste, jednolinijkowe, anonimowe funkcje Mogą byd przekazywane tak jak zwykłąe funkcje nazwane Używane często jako funkcje w callback, list comprehesnsions, high-order functions return jest w nich domniemany (implicite) square = lambda x: x*x >>> square(9) 81 squares = map(lambda x: x*x, range(3)) >>> squares [0, 1, 4] 8

Domknięcie (Closure) Domknięcie to funkcja ze związanymi zmiennymi: składa się z funkcji, jej lokalnych zmiennych oraz referencji do zmiennych spoza zakresu (outer scope) Obiekty to metody związane z danymi na których działają; Domknięcia to dane dowiązane do funkcji # Zwraca funkcję opodatkowania daną stawką VAT def vat_taxer(rate): def taxer(amount): return amount * (float(rate) / 100) return taxer vat22 = vat_taxer(22) vat7 = vat_taxer(7) 9

Domknięcie przykład # zwraca funkcję mnożącą przez n def multiply_by(n): return lambda x: return x*n double = multiply_by(2) triple = multiply_by(3) >>> double(2) 4 >>> triple(4) 12 10

High-order functions 1 map zastosuj funkcję na każdym elemencie sekwencji: >> map(lambda x: x**2, range(1,5)) [1, 4, 9, 16] filter wybiera elementy spełniające warunek >> filter(lambda x: x%2==0, range(10)) [0, 2, 4, 6, 8] reduce redukuje elementy sekwencji do jednej wartości za pomocą funkcji: >> reduce(lambda x,y: x+y, [1, 2, 3, 4]) 10 11

High-order functions 2 zip zszywa kolejne elementy z sekwencji: >> zip(( a, b, c ), (1,2,3)) [( a,1), ( b,2), ( c,3)] all zwraca True, gdy wszystkie elementy są True: >> all((1, 2, alala )) True any zwraca True, gdy choś jeden element jest True: >> any((0, None, 1)) True 12

Dekoratory def my_decorator(fn): def wrapper(*args): print before invocation fn(*args) print after invocation return wrapper @my_decorator def hello_world(): print hello, world >>> hello_world() before invocation hello, world after invocation 13

Iteratory Iterator jest analogiem sekwencji ale z kilkoma różnicami: Często używamy funkcji, która tworzy kolejne elementy sekwencji (np. za pomocą Generatora) Elementy sekwencji są produkowane dopiero w momencie kiedy są potrzebne Iteratory mogą tworzyd sekwencje dowolnie długie (w odróżnieniu od sekwencji struktur danych ograniczonych pamięcią) Iterator to protokół (nie typ danych) na który składa się: Funkcji next() (w implementacji next ()) Raise StopIteration after last item 14

Generatory Generator funkcja działająca jako Iterator Każdy element jest zwracany za pomocą polecenia yield Zakooczenie przez: zakooczenie funkcji zwykłe return raise StopIteration 15

Generatory przykład def four(): x = 0 while x < 3: print("in generator, x =", x) yield x x += 1 >>> for i in four(): print(i) in generator, x = 0 0 in generator, x = 1 1 in generator, x = 2 2 16

Generatory wyrażenia Składniowo podobne do List Comprehensions Ewaluacja leniwa jeden element za jednym razem Mogą byd używane wszędzie, gdzie jest spodziewany Iterator # Przykład 1 it = (line.strip() for line in open('input.txt')) # Przykład 2 można ominąć nawiasy w wywołaniu funkcji func(line.strip() for line in open('input.txt')) 17

EX9 3 implementacje is_prime() # Implementacja imperatywna wersja 1 def is_prime(n): k = 2 while k < n: if n % k == 0: k += 1 return True return False # Implementacja funkcyjna wersja 2 def is_prime(n): return len(filter(lambda k: n%k==0, range(2,n))) == 0 # Implementacja funkcyjna wersja 3 def is_prime(n): return not any(n%k==0 for k in xrange(2,n)) 18

PROGRAMOWANIE OBIEKTOWE 19

Programowanie obiektowe Object-oriented programming (OOP) Klasy i obiekty: Obiekty są tworzone na podstawie definicji klas Pojedynczy obiekt jest nazywany instancją klasy Dane i operacje na nich (funkcje) tworzą obiekt Operacje/funkcje zawarte w klasie są nazywane metodami Dane/zmienne w klasie są nazywane atrybutami klasy Atrybuty tworzą stan instancji klasy (obiektu) 20

Definicja klasy class circle: def init (self, radius): self.radius = radius init jest inicjalizatorem obiektu self jest referencją do obiektu # utworzenie obiektu klasy circle >> c = circle(10) c < main.circle instance at 0x004A48A0> >> dir(c) [' doc ', ' init ', ' module ', 'radius'] 21

Przeszukiwanie: obiekt.atrybut Szuka pierwszego wystąpienia atrybutu w obiekcie lub we wszystkich klasach powyżej (z których dziedziczył) od dołu do góry i od lewej do prawej strony class C2: x = z = 2 class C3: w = z = 3 class C1(C2, C3): x = y = 1 I1 = C1() I2 = C1() 22

Metody specjalne klas METODA IMPLEMENTUJE WOŁANA DLA init Konstruktor obiektu X = Class(args) del Destruktor obiektu Usuwanie obiektu X add Operator + X + Y, X += Y jeśli nie iadd or Operator (bitowy OR) X Y, X = Y jeśli nie _ior repr, str Drukowanie, konwersja print(x), repr(x), str(x) call Wywołanie funkcji X(*args, **kargs) setattr Przypisanie atrybutu X.any = value delattr Skasowanie atrybutu del X.any getattribute Pobranie atrybutu X.any getattr Pobranie atrybutu X.undefined 23

Metody specjalne klas c.d. METODA IMPLEMENTUJE WOŁANA DLA getitem Indeksowanie, przecinanie, iteracja setitem Przypisanie indeksowane, przecinane delitem Usuwanie indeksowane, przecinane X[key], X[i:j], także dla pętli jeśli nie iter X[key] = value, X[i:j] = sequence del X[key], del X[i:j] len Długośd len(x), testowanie gdy nie bool bool Testy logiczne bool(x), ( nonzero w Py 2.6) lt, gt, le, ge, eq, ne Porównania X < Y, X > Y, X <= Y, X >= Y, X == Y, X!= Y ( cmp w Py 2.6) 24

Metody specjalne klas c.d. METODA IMPLEMENTUJE WOŁANA DLA iadd Operator dodawania w miejscu X += Y iter, next Iterator I=iter(X), next(i); dla pętli contains Tester przynależności item in X (dla iterowalnych) index Wartośd całkowitoliczbowa hex(x), bin(x), oct(x), O[X], O[X:] (zastpuje Py 2.x oct, hex ) enter, exit Menadżer kontekstu with with obj as var: get, set, delete Deskryptory atrybutów X.attr, X.attr = value, del X.attr new Tworzenie obiektu przed init 25

Atrybuty specjalne klas Wszystkie klasy posiadają następujące atrybuty: doc string dokumentacji class referencji do obiektu klasy (z każdej instancji) bases lista klas bazowych name nazwa klasy obiektu module nazwa modułu, w którym klasę zdefiniowano dict słownik będący przestrzenią nazw klasy (ale nie superklas) 26

Przykład 1 zmienne klasowe class Circle: pi = 3.14159 # class variable def init (self, radius = 1): self.radius = radius def area(self): return self.radius**2 * pt print Circle.pi circle1 = Circle() print circle1.area() circle5 = Circle(5) print circle5.area() 27

Przykład 2 metody statyczne class Circle: all_circles = [] # class variable pi = 3.14159 # class variable def init (self, r=1): self.radius = r self. class.all_circles.append(self) def area(self): return self. class.pi * self.radius * self.radius @staticmethod def total_area(): total = 0 for c in Circle.all_circles: total = total + c.area() return total 28

Przykład 3 dziedziczenie class Shape: def init (self, x, y): self.x = x self.y = y class Square(Shape): def init (self, side=1, x=0, y=0): super(). init (x, y) self.side = side class Circle(Shape): def init (self, r=1, x=0, y=0): super(). init (x, y) self.radius = r 29

Przykład 4 getters/setters class Temperature: def init (self): self. t_fahr = 0 # private in F @property def temp(self): # in ºC return (self. t_fahr-32)*5/9 @temp.setter def temp(self, new_temp): # in ºC self. t_fahr = new_temp*9/5 + 32 30

Klasa operacji na ułamkach zwykłych Implementacja klasy ułamek oraz operacji: dodawania, odejmowania, mnożenia i dzielenia ułamków wyświetlania ułamków EX10 31