summaryrefslogtreecommitdiff
path: root/advanced_python/closures.tex
diff options
context:
space:
mode:
authorPrabhu Ramachandran2017-11-13 13:54:23 +0530
committerPrabhu Ramachandran2017-11-13 13:54:23 +0530
commit3150557cb953c95ef3e57cce356ea0196f3183ff (patch)
tree1f52128db7574dd227f68eb9d91ccf0c1aca5d2b /advanced_python/closures.tex
parentf43af0023d3a70ecebb18e0c18cebcffdd4ca21c (diff)
downloadpython-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.tex105
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}