diff options
author | Prabhu Ramachandran | 2017-11-13 13:54:23 +0530 |
---|---|---|
committer | Prabhu Ramachandran | 2017-11-13 13:54:23 +0530 |
commit | 3150557cb953c95ef3e57cce356ea0196f3183ff (patch) | |
tree | 1f52128db7574dd227f68eb9d91ccf0c1aca5d2b /advanced_python/closures.tex | |
parent | f43af0023d3a70ecebb18e0c18cebcffdd4ca21c (diff) | |
download | python-workshops-3150557cb953c95ef3e57cce356ea0196f3183ff.tar.gz python-workshops-3150557cb953c95ef3e57cce356ea0196f3183ff.tar.bz2 python-workshops-3150557cb953c95ef3e57cce356ea0196f3183ff.zip |
Split only_kwarg_closure into two.
Diffstat (limited to 'advanced_python/closures.tex')
-rw-r--r-- | advanced_python/closures.tex | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/advanced_python/closures.tex b/advanced_python/closures.tex new file mode 100644 index 0000000..1c17c7b --- /dev/null +++ b/advanced_python/closures.tex @@ -0,0 +1,105 @@ +\documentclass[14pt,compress]{beamer} + +\input{macros.tex} + +\title[Closures]{Advanced Python} +\subtitle{Closures} + +\author[FOSSEE] {The FOSSEE Group} + +\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} +\date[] {Mumbai, India} + +\begin{document} + +\begin{frame} + \titlepage +\end{frame} + +\begin{frame} + \frametitle{Overview} + \begin{itemize} + \item Higher-order functions + \item Closures + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Recap of higher-order functions} + \begin{lstlisting} +In []: def sqr(x): + ...: return x*x + +In []: def sum(func, n): + ...: result = 0 + ...: for i in range(n): + ...: result += func(n) + ...: return result + +In []: sum(sqr, 5) +Out[]: 125 + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Recap of higher-order functions} + \begin{lstlisting} +def f(): + def g(x): + return x+1 + return g + +In []: func = f() +In []: func(1) +In []: f()(1) # Also valid! + \end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Closures} + \begin{lstlisting} +def mul(x): + def g(y): + return y*x + return g + +In []: twice = mul(2.0) +In []: twice(20) +Out[]: 40.0 + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Closures ...} + \begin{lstlisting} + +In []: twice = mul(3.0) +In []: twice(20) +Out[]: 60.0 + \end{lstlisting} +\end{frame} + +\begin{frame} + \frametitle{Discussion} + \begin{itemize} + \item \typ{g} uses \typ{x} + \item \typ{x} is different in each case + \item So \typ{twice, thrice} ``curry'' the passed \typ{x} + \item This function is called a closure + \item Encloses its local environment + \end{itemize} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Higher-order functions} + \begin{itemize} + \item Functions that manipulate functions + \item Passing a function as an argument + \item A function that returns another function + \item A closure + \end{itemize} +\end{frame} + +\end{document} |