\documentclass[14pt,compress,aspectratio=169]{beamer} \input{macros.tex} \title[Names and Objects]{Advanced Python} \subtitle{Statements, Expressions, Names, and Objects} \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 Statements \item Expressions \item Variables \item Objects \item Names \end{itemize} \end{frame} \begin{frame} \frametitle{Recap of essential concepts} \begin{itemize} \item Mutable data types \item Immutable data types \end{itemize} \end{frame} \begin{frame} \frametitle{Expressions} \begin{itemize} \item Evaluate to something \item Describe some computation \item Python evaluates expressions \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Examples of Expressions} \small \begin{lstlisting} In []: 1 Out[]: 1 In []: (1 + 1.2) * 2.0 Out[]: 4.4 In []: sin(0.1) Out[]: 0.09983341664682815 In []: (2 > 1) and (3 > 2) Out[]: True In []: [1, 2, 3, 4][::2] Out[]: [1, 3] # Note that each has an output \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Statements} \begin{itemize} \item Instruct Python to perform some action \item A program is a series of statements \item A statement can have expressions \item Assignments are statements \end{itemize} \begin{lstlisting} In []: a = 1 In []: a += 1 \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Assignment statements} \begin{lstlisting} In []: a = 1 In []: a = 'hello' \end{lstlisting} \begin{itemize} \item These are assignment statements \item Values are \emph{Objects} \end{itemize} \end{frame} \begin{frame} \frametitle{Objects} \begin{itemize} \item Objects: all data in Python \item Have an identity, type, and value \item Identity is checked using \typ{is} \item Identity and type cannot change \item Value of mutables change \item Immutable object value cannot change \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Names and objects} \begin{itemize} \item Assignment binds a name to an object \end{itemize} \begin{lstlisting} In []: a = 1 In []: b = 1 \end{lstlisting} \begin{itemize} \item \typ{a} is a name for the object \typ{1} \item \typ{b} is also a name for the same object \typ{1} \end{itemize} \begin{lstlisting} In []: b = a # The same as above \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Visualizing this} \begin{minipage}{0.4\textwidth} \begin{lstlisting} In []: a = 1 \end{lstlisting} \end{minipage} \begin{minipage}{0.4\textwidth} \includegraphics[width=2.5in]{data/a_eq_1.png} \end{minipage} \pause \begin{minipage}{0.4\textwidth} \begin{lstlisting} In []: b = a \end{lstlisting} \end{minipage} \begin{minipage}{0.4\textwidth} \includegraphics[width=2.5in]{data/a_b_eq_1.png} \end{minipage} {\small Made with: \url{pythontutor.com}} \end{frame} \begin{frame}[fragile] \frametitle{Visualizing this ...} Set \typ{b} to something else: \begin{minipage}{0.4\textwidth} \begin{lstlisting} In []: a = 1 In []: b = 2 \end{lstlisting} \end{minipage} \begin{minipage}{0.4\textwidth} \includegraphics[width=2.5in]{data/a_1_b_2.png} \end{minipage} \vspace*{1in} {\small Made with: \url{pythontutor.com}} \end{frame} \begin{frame}[fragile] \frametitle{Names and objects ...} \begin{itemize} \item More interesting when \typ{a} is a list \end{itemize} \begin{minipage}{0.4\textwidth} \begin{lstlisting} In []: a = [1, 2] \end{lstlisting} \end{minipage} \begin{minipage}{0.4\textwidth} \hspace*{0.2in}\includegraphics[width=2.25in]{data/a_list_b_2.png} \end{minipage} \end{frame} \begin{frame}[fragile] \frametitle{Names and objects ...} \begin{minipage}{0.4\textwidth} \begin{lstlisting} In []: b = a \end{lstlisting} \end{minipage} \begin{minipage}{0.4\textwidth} \hspace*{0.2in}\includegraphics[width=2.25in]{data/a_b_list.png} \end{minipage} \pause \begin{itemize} \item \typ{a} is a name for the object \typ{[1, 2]} \item \typ{b} is also a name for the \alert{same object} \item Changing the contents of \typ{a} reflect in \typ{b} \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Names and objects ...} \begin{minipage}{0.4\textwidth} \begin{lstlisting} In []: a.append(3) In []: b Out[]: [1, 2, 3] \end{lstlisting} \end{minipage} \begin{minipage}{0.4\textwidth} \hspace*{0.4in}\includegraphics[width=2.25in]{data/a_b_list1.png} \end{minipage} \end{frame} \begin{frame}[fragile] \frametitle{Names and objects ...} \begin{minipage}{0.4\textwidth} \begin{itemize} \item Re-assign \typ{a} \end{itemize} \begin{lstlisting} In []: a = 'hello' \end{lstlisting} \pause \end{minipage} \begin{minipage}{0.4\textwidth} \hspace*{0.4in}\includegraphics[width=2.25in]{data/a_str_b_list.png} \end{minipage} \end{frame} \begin{frame}[fragile] \frametitle{Names and objects ...} Rendered more compactly: \vspace*{0.25in} \begin{center} \includegraphics[width=3in]{data/a_str_b_list_compact.png} \end{center} \vspace*{0.5in} {\small Made with: \url{pythontutor.com}} \end{frame} \begin{frame} \frametitle{Summary} \begin{itemize} \item Expressions: evaluate to something \item Statements: instruct Python to do something \item Objects: identity, type, value \item Assignments bind names to objects \item Frame: an environment for bindings \item Explore \url{pythontutor.com} \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Exercise 1} \vspace*{-0.1in} \begin{lstlisting} a = [1, 2] b = a c = [10, 20] a.append(c) del b c.append(30) del c a[-1].append(40) a = 1 \end{lstlisting} \vspace*{0.1in} \begin{itemize} \item Run step-by-step on \url{pythontutor.com} \item Predict the output before you see the answer \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Exercise 2} \begin{lstlisting} a = [1, 2] c = [10, 20] a.append(c) c.append(a) a.append(a) \end{lstlisting} \vspace*{0.1in} \begin{itemize} \item Run step-by-step on \url{pythontutor.com} \item Predict the output before you see the answer \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Exercise 3} \begin{lstlisting} x = [1, 2] y = 'hello' def f(x): y = x + 1 return x*y f(2) \end{lstlisting} \vspace*{0.1in} \begin{itemize} \item Run step-by-step on \url{pythontutor.com} \item Predict the output before you see the answer \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Exercise 4} \begin{lstlisting} def f(x): def g(x): return x + 1 return g(x) f(1) f(2) \end{lstlisting} \vspace*{0.1in} \begin{itemize} \item Run step-by-step on \url{pythontutor.com} \item Predict the output before you see the answer \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Exercise 5} \begin{lstlisting} def mul(x): def g(y): return y*x return g twice = mul(2.0) twice(20) \end{lstlisting} \vspace*{0.1in} \begin{itemize} \item Run step-by-step on \url{pythontutor.com} \item Predict the output before you see the answer \end{itemize} \end{frame} \end{document}