﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/examples.screen.xsl" media="screen"?>
<examples chapter="Dekorátory" directory="dekoratory">

<!--
  <example>
    <text>
    </text>
    <hint>
    </hint>
    <solution src="dekoratory/.py" lang="python" />
  </example>
-->


  <example>
    <text>
        Vytvořte dekorátor, který při zavolání funkce vypíše (na konzoli) jméno volané funkce, přehled vstupních parametrů a celkový čas, který byl potřeba k jejímu vykonání.
    </text>
    <hint>
        Čas můžete změřit pomocí metody <code>time.time()</code> – ta vrací čas v sekundách od začátku epochy v okamžiku svého zavolání.
    </hint>
    <solution src="dekoratory/01.py" lang="python" />
  </example>

  <example>
    <text>
        Vytvořte dekorátor, který volané funkci pošle vstupní poziční parametry v opačném pořadí, než byly zadány.
    </text>
    <hint>
        Nezapomeňte cestou na pojmenované argumenty.
    </hint>
    <solution src="dekoratory/02.py" lang="python" />
  </example>

  <example>
    <text>
        Vytvořte dekorátor, který pro funkci, jejíž výstupní hodnotou bude seznam, vrátí tento seznam seřazený.
    </text>
    <hint>
        Uvažujte implicitní řazení <em>sorted()</em>.
    </hint>
    <solution src="dekoratory/03.py" lang="python" />
  </example>

  <example>
    <text>
        Upravte předchozí dekorátor tak, aby na svém vstupu přebíral předpis pro třídění. Tj. jedná se o dekorátor s parametrem, kterým je hodnota parametru <em>key</em> pro funkci <em>sorted()</em>.
    </text>
    <hint>
        Jedná se tedy vlastně o dva dekorátory zanořené v sobě (podívejte se do přednášek), kde ten vnější z nich přebírá příslušnou hodnotu pro atribut <em>key</em> (buď odkaz na existující funkci nebo přímo vlastní lambda-funkci) a teprve druhý, vnitřní vlastní dekorovanou funkci.
    </hint>
    <solution src="dekoratory/04.py" lang="python" />
  </example>

  <example>
    <text>
        Vytvořte dekorátor, který pro funkci vracející fragmenty HTML odstraní z tohoto řetězce veškeré formátovací značky.
    </text>
    <hint>
        Tj. například pro vstup <code>"&lt;p class='test'&gt;ahojte&lt;/p&gt;"</code> vrátí <code>"ahojte"</code>.
    </hint>
    <solution src="dekoratory/05.py" lang="python" />
  </example>


</examples>
