Programování v Pythonu

Podobné dokumenty
Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python

Programování v Pythonu

Programování v Pythonu

Programování v Pythonu

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Programování v Pythonu

Programování v Pythonu

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Programování v jazyce JavaScript

Konečný automat. Jan Kybic.

Programování v jazyce JavaScript

Programování v Pythonu

Funkce, podmíněný příkaz if-else, příkaz cyklu for

8 Třídy, objekty, metody, předávání argumentů metod

PSK3-9. Základy skriptování. Hlavička

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Rozklad na prvočinitele. 3. prosince 2010

Metatřídy v Pythonu a jejich využití

Jak testovat software v praxi. aneb šetříme svůj vlastní čas

Programování v jazyce JavaScript

IB111 Úvod do programování skrze Python Přednáška 7

5. Dynamické programování

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

1. Programování proti rozhraní

ANOTACE vytvořených/inovovaných materiálů

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Programování v jazyce JavaScript

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

typová konverze typová inference

Paradigmata programování II Korutiny a nedeterminismus

Výjimky a ošetřování chyb v PHP. Who is General Failure and why is he reading my disk?!

Funkce - opakování. Funkce může přijímat parametry na vstupu a může vracet parametry na výstupu.

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Knihovna XmlLib TXV druhé vydání říjen 2012 změny vyhrazeny

Dědění, polymorfismus

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Programování v Pythonu

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Databázové aplikace pro internetové prostředí PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

Knihovna WebGraphLib

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

Hrátky s funkcemi. PV173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 29.

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

PB161 Programování v jazyce C++ Přednáška 4

Rekurzivní algoritmy

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace


Struktura programu v době běhu

Metody připojování periferií

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 5. CVIČENÍ

IB111 Základy programování Radek Pelánek

Přetěžování operátorů

PB161 Programování v jazyce C++ Přednáška 9

O makrech, která umí aritmetiku s velkými čísly. Macros Which Handle Arithmetics with Big Numbers. Jan Šustek KMa PřF OU. Brejlov

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Úvod do Operačních Systémů

První kapitola úvod do problematiky

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Funkční objekty v C++.

Lineární spojový seznam (úvod do dynamických datových struktur)

E+034 = ; = e E+034

ISU Cvičení 7. Marta Čudová

Abstraktní datové typy: zásobník

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU

Abstraktní datové typy

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

Jazyk C++, některá rozšíření oproti C

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Operační systémy. Cvičení 4: Programování v C pod Unixem

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Abstraktní třídy, polymorfní struktury

prof. RNDr. Čestmír Burdík DrCs. prof. Ing. Edita Pelantová CSc. BI-ZMA ZS 2009/2010

Programování v C++ 2, 4. cvičení

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

PARADIGMATA PROGRAMOVÁNÍ 2 KORUTINY, NEDETERMINISMUS

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Transkript:

ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního m sta Prahy. Praha & EU: Investujeme do va²í budoucnosti

Python (2011-04-28) : Dekorátory 1 of 5 Python Dekorátory Úvod Dekorátory obecně jsou funkce, které berou jako parametr funkci (a případně nějaké další doplňující parametry) a vrací tuto funkci zadaným způsobem upravenou, odekorovanou. Většinou se pro jejich zápis používá konstrukce @DEKORÁTOR. Jinými slovy konstrukce.. @dekorátor def moje_funkce(): BLOK..je vlastně přehlednější náhrada za.. def moje_funkce(): BLOK moje_funkce = dekorátor(moje_funkce) Poznámka: Stejně jako funkce můžeme zanořovat do sebe, @dekorátory můžeme přidávat před definici funkce aplikují se v uvedeném pořadí. Konstrukce dekorátoru Zavedeme-li dekorátor.. def dekorátor(funkce): def _dekorátor(): print('start') ret = funkce() return ret return _dekorátor..pak volání následujícím způsobem odekorované funkce..

Python (2011-04-28) : Dekorátory 2 of 5 @dekorátor def moje_funkce(): print( 'moje funkce' )..vrátí: >>> moje_funkce() START moje funkce Celé toto funguje právě proto, že funkce uvnitř funkcí si s sebou nesou celý aktuální (dynamický) kontext, jak jsme viděli už dříve na případě uzávěrů (closures). Příklad Ukažme si rozumnější příklad dekorátor, který při volání funkce vypíše její jméno: >>> def decorator(target): def wrapper(): print( 'Calling function "%s"' % target. name ) return target() return wrapper >>> @decorator def target(): print('i am the target function') >>> target() Calling function "target" I am the target function

Python (2011-04-28) : Dekorátory 3 of 5 Předávání parametrů funkci Bude-li dekorovaná funkce očekávat nějaké vstupní parametry, syntaxe se nepatrně změní o vnitřní parametr: >>> def dekorátor(funkce): def _dekorátor(x): print('start') ret = funkce(x) return ret return _dekorátor @dekorátor def moje_funkce(s): print( 'Ahoj, ', s, '!', sep='' ) >>> moje_funkce('láďo') START Ahoj, Láďo! Příklad Ukažme si rozumnější příklad dekorátor, který při volání funkce vypíše všechny její parametry a navíc jeden (debug) nastaví, čímž i změní její chování: >>> def decorator(target): def wrapper(*args, **kwargs): kwargs.update({'debug': True}) # Edit the keyword arg print( 'Calling function "%s" with arguments %s and ke return target(*args, **kwargs) wrapper.attribute = 1 return wrapper >>> @decorator def target(a, b, debug=false): if debug: print('[debug] I am the target function') return a + b >>> target(1,2) Calling function "target" with arguments (1, 2) and keyword argume [Debug] I am the target function 3

Python (2011-04-28) : Dekorátory 4 of 5 Předávání parametrů dekorátoru Potřebujeme-li předat parametry nikoli dekorované funkci, ale dekorátoru samotnému, konstrukce se zesložití o další mezifunkci, která tyto parametry bude přebírat a posílat dál. Příklad: Při zavedení následujícího dekorátoru.. def omez_hodnoty(maximum): # funkce přebírající parametry d def _omez_hodnoty(funkce): # funkce přebírající dekorovanou def omez_hodnoty(xs): # konečná návratová funkce ret = funkce( [x for x in xs if x <= maximum] ) return ret return omez_hodnoty return _omez_hodnoty..můžeme provést odekorování např. takto: @omez_hodnoty(9) def zpracuj_hodnoty(xs): return [x**2 for x in xs] Volání funkce zpracuj_hodnoty() pak vrátí: >>> test = zpracuj_hodnoty( [1, 3, 11, 4, 7, 14, 5] ) >>> print(test) [1, 9, 16, 49, 25] Použití I. Python sám nabízí několik připravených dekorátorů. Již jsme se seznámili s dekorátory @classmethod a @staticmethod u tříd, které zajišťují, že příslušné metody třídy se nechovají jako instanční, ale jako třídní nebo statické. II. Z předchozích příkladů je vidět, že častého použití by se mohly dekorátory dočkat např. u logovacích nebo debugovacích funkcí: dekorátor pro výpis informací o volaných funkcích dekorátor pro ukládání informací o volaných funkcích III. Zcela typicky se s dekorátory setkáte v různých webových frameworcích, kde slouží k zajištění vybraných podmínek pro vstupní nebo návratové hodnoty funkcí. Typické příklady:

Python (2011-04-28) : Dekorátory 5 of 5 funkci je možné vykonat pouze tehdy, je-li daný uživatel přihlášen do systému funkce musí v daném kontextu vracet řetězce bez formátovacích prvků Poznámky Při použití dekorátorů je třeba pamatovat na to, že obalovací mezifunkce zcela nahradí dekorovanou funkci. Což mimo jiné znamená, že pokud budeme dekorované funkci pomocí introspekce klást nějaké otázky o její identitě, dostaneme úplně jiné odpovědi budou se totiž týkat identity dekorátoru! Jinými slovy pokud se nebudete hodně snažit, použití dekorátoru zcela změní tzv. otisk funkce (call signature; tj. přibližně jméno funkce a seznam jejích argumentů).