diff --git a/03-typing/03-typing.tex b/03-typing/03-typing.tex new file mode 100644 index 0000000000000000000000000000000000000000..2f3dad4640054a74582d28f99d2776848f423fd5 --- /dev/null +++ b/03-typing/03-typing.tex @@ -0,0 +1,154 @@ +\documentclass{beamer} +\usepackage[utf8]{inputenc} +\usepackage[czech]{babel} +\usepackage{palatino} +\usepackage{verbatim} +\usetheme{Warsaw} +\title{Programování 2: Typové anotace} +\author[Martin Mareš]{Martin Mareš\\\texttt{mj@ucw.cz}} +\institute{Katedra Aplikované Matematiky\\MFF UK Praha} +\date{2020} +\setbeamersize{text margin left=5mm} +\setbeamersize{text margin right=5mm} +\begin{document} +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline}{} +\setbeamerfont{title page}{family=\rmfamily} +\shorthandoff{"} + +\begin{frame} +\titlepage +\end{frame} + +\input ../slidemac.tex + +% ---------------------------------------------------------------------- + +\begin{frame}{Proč a nač?} + +Jak se programovací jazyky chovají k~typům dat: + +\begin{itemize} +\item {\bf statické} typování -- typ mají proměnné a funkce +\item {\bf dynamické} typování -- typ mají hodnoty +\end{itemize} + +~ + +Obojí má své výhody i nevýhody. + +~ + +K~čemu třeba jsou užitečné statické typy: + +\begin{itemize} +\item Lepší dokumentace\\(např.: funguje {\bf math.exp} na komplexní čísla?) +\item Kontrola konzistence typů před spuštěním programu +\item Napovídání v~editorech +\end{itemize} + +~ + +Dnešní Python umí kombinovat statické a dynamické typy~\dots + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Typové anotace} + +{\tt\color{blue} +def f(x: int, y: str) -> int:\\ +~~~~return x + len(y) +} + +\smallskip + +Čteme: {\bf f} je funkce, parametr {\bf x} je typu {\bf int}, {\bf y} typu {\bf str},\\ +vrací výsledek typu {\bf int}. + +~ + +{\tt\color{blue} +a: int = 42 +} + +\smallskip + +Proměnné {\bf a} jsme deklarovali typ {\bf int}. + +~ + +Python sám typy nekontroluje (to dělají samostatné type checkery), +ale pamatuje si je: + +\smallskip + +\py{% +f.\_\_annotations\_\_ +}{% +\{'x': int, 'y': str, 'return': int\} +} + +\py{% +help(f) +}{% +Help on function f in module \_\_main\_\_:\\ +f(x: int, y: str) -> int +} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Složitější typy} + +{\tt\color{blue} +from typing import List\\ +def g(seznam: List[str]) -> None: +} + +\smallskip + +Parametrizovaný typ pro seznamy. + +~ + +{\tt\color{blue} +from typing import Optional\\ +def center(s: str, šíře: Optional[int]=80) -> str: +} + +\smallskip + +Buď {\bf int} nebo {\bf None} (též chybí-li parametr při volání). + +~ + +{\tt\color{blue} +Class Třída:\\ +~~~~def metoda(self, něco: int): +} + +\smallskip + +{\bf self} automaticky dostane typ {\bf Třída}. + +~ + + +{\tt\color{blue} +from typing import Sequence, TypeVar\\ +T = TypeVar("T")\\ +def choose(s: Sequence[T]) -> T: +} + +\smallskip + +Funguje pro jakoukoliv homogenní posloupnost (seznam/tuple/\dots). + +\end{frame} + +% ---------------------------------------------------------------------- + +\end{document} diff --git a/03-typing/Makefile b/03-typing/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..282b93663b50fa0bf855c41dcdf7c1f4e79fa291 --- /dev/null +++ b/03-typing/Makefile @@ -0,0 +1,3 @@ +SLIDES=03-typing.pdf + +include ../Makerules diff --git a/03-matplotlib/notes b/04-matplotlib/notes similarity index 100% rename from 03-matplotlib/notes rename to 04-matplotlib/notes