Python in the Enterprise Wykład 1 Bardzo krótki wstęp do Pythona Adam Dendek WFiIS, AGH
Wstępne uwagi Dekoratory Klasy Wyjątki Socket Zawartość Kilka użytecznych modułów Użyteczne narzędzia
Prośba do Państwa Jest bardzo prawdopodobne, że dla Szanownych Państwa materiał przedstawiany na wykładzie może być znajomy Jest duża szanasa, że pposiadają Państwo większą wiedzę na wybrane (lub wszystkie) zagadnienia W takich wypadkach proszę o wyrozumiałość. Proszę również o aktywny udział w wykładzie.
Polecany kurs wstępny Jeżeli nie mają Państwo żadnego doświadczenia w programowaniu w Pythonie sugeruje się zapoznać z wykładmi dr Bołda. Kurs traktuje pythona jako język skryptowy http://tbold.web.cern.ch/tbold/scripts/
Funkcje (czyli zaczynamy baaardzo delikatnie ) Są fundamentalnymi jednostkami kodu. Spójrzmy na banalny przykład Wynik:
*args and **kwargs *args oraz **kwargs pozwala na przekazanie do funkcji dowolnej ilości argumentów Kwargs słownik parametrów nazwanych
Domknięcia (ang. Closures) Ponieważ w Pythonie wszystko jest obiektem można zwracać również funkcje! (dla programistów JS oczywiste) Należy traktować jako generator kodu Ok! Ale po co nam to?!
Problem (wydumany) debugowanie Załóżmy że chcemy się dowiedzieć czy nasza funkcja w ogóle została wykonana oraz zbadać parametry OKROPNE!!!! Nie lubimy powtarzać kodu
Dekorator Dekorator jest funkcją która tworzy wraperem otaczający inną funkcję Dekorator działa tak samo jak bazowa funkcja jednakże pozwala na przeprowadzenie dodatkowych procesów Brak powtórek kodu. Wygląda znacznie zgrabniej, prawda?
Składnia Pythona dla dekoratorów Gdzie spotkamy dekoratory?! Na labolatoriach! Logowanie Testy jednostkowe ( na razie nie będę zdradzać szczegółów)
Konkurs W języku python każdy obiekt przekazywany jest przez referencję Co zostanie wyświetlone na ekranie?
Wyjaśnienie* Immutable(po polsku nie dający się zmieniać): numbers: int, float, complex immutable sequences: string, tuples, bytes, frozensets Mutable: wszystko inne mutable sequences: list, byte array set type: sets mapping type: dict classes, class instances Etc. Jak stworzyć dającego się modyfikować string albo int? *za stackoverflow http://stackoverflow.com/questions/8056130/immutable-vs-mutable-types-python
Krótkie spojrzenie na Klasy @staticmethod function is nothing more than a function defined inside a class. It is callable without instantiating the class first. It s definition is immutable via inheritance. @classmethod function also callable without instantiating the class, but its definition follows Sub class, not Parent class, via inheritance. That s because the first argument for @classmethod function must always be cls. * *Materiał z stackoverflow http://stackoverflow.com/questions/136097/what-is-the-difference-between-staticmeth classmethod-in-python
Dziedziczenie Python wspiera OOP w związku z tym dostępne jest dziedziczenie klas ID: 1 width 100 height 10
Problem diamentu Python zezwala na wielokrotne dziedziczenie Pytanie jaki będzie wynik: I am parent B2
Podobnie jak funkcję można udekorować klasę Jednakże nie zadziała dla całej hierarchii klas Dekorujemy tylko klasę bazową! Rozwiązania wraz z przykładową implementacją proszę przesyłać mailowo na adres adendek@fis.agh.edu.pl do 1.11.15 Do wygrania cenne nagrody!
Wyjątki Labolatiorium Python jest językiem programowania wysokiego poziomu. Wszystkie problemowe sytuacje obsługujemy przez wyjątki. Wbudowane typy wyjątków: https://pymotw.com/2/exceptions/ Key Error 'Zenek' Zawsze się wykonam Zachęcam do zabawy parameterami aby uzyskać różne typy wyjątków
Własne klasy wyjątków Można definiować własne typy wyjątków Używa się dziedziczenia Tego typu zakończenie programu jest nie do przyjęcia!
Echo serwer W trakcie tego wykładu pokażę tylko jak przy użyciu języka python napisać prosty program działający w trybie klient-serwer Będziecie Państwo pisać tego typu aplikacje na labolatoriach!
Echo Client
Kilka użytecznych modułów
OptionParser Moduł służący do pobierania danych z linii komend Bardzo użyteczny przy tworzeniu skryptów
XML parser Przykładowy plik items.xml ( wynik generowany przez przeglądarkę Firefox ) Wszystkie konfiguracje w Państwa projektach mają być zapisane w postaci plików XML!
Logger Proszę o zapoznanie się z modułem logger https://docs.python.org/2/howto/logging-cookbook.h Będzie musiał być używany w państwa projektach!
PIP W większości przypadków nie trzeba odkrywać koła od nowa Można a nawet trzeba wykorzystać istniejące pakiety W celu zarządzania zewnętrznymi pakietami warto użyć systemu zarządzania pakietami Instrukcja instalacji http://pip.readthedocs.org/en/stable/installing/ Przykładowe użycie pip install SomePackage Użycie z Requiements file pip install -r requirements.txt Każdy projekt musi zawierać taki plik! User Guide: http://pip.readthedocs.org/en/stable/user_guide/
Virtualenv Realna sytuacja: Pracujemy nad dwoma projektami jednocześnie Pierwszy z nich wymaga modułu Foo w wersji 1.0 Drugi Foo w wersji 2.1 W tym miejscu przychodzi z pomocą Virtualenv Tworzy on nowe środowisko które nie współdzieli bibliotek jak również zmiennych środowiskowych Zachęcam do używania tego programu podczas tworzenia projektów Link do dokumnetacji https://virtualenv.pypa.io/en/latest/index.html
IDE & styl pisania kodu Podczas pracy nad projektami sugerowane jest używanie Pycharm'a. https://www.jetbrains.com/pycharm/ Proszę o zapoznanie się z PEP8 https://www.python.org/dev/peps/pep-0008/
Literatura którą polecam Python Cookbook, Third Edition Begining Python from Novice to Professional https://www.youtube.com/watch?v=spiwg5jsozi Konferencja PyCon https://www.youtube.com/channel/ucgxzjk6guohvkr_08tt4hjq Stack overflow :) Więcej podam podczas labolatoriów
W następnym odcinku Wzorce projektowe vs Wiedzmin 3 Serdecznie zapraszam!
Podobnie jak funkcję można udekorować klasę Jednakże nie zadziała dla całej hierarchii klas Dekorujemy tylko klasę bazową! Rozwiązania wraz z przykładową implementacją proszę przesyłać mailowo na adres adendek@fis.agh.edu.pl do 1.11.15 Do wygrania cenne nagrody!