%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Tutorial slides on Python. % % Author: FOSSEE % Copyright (c) 2009, FOSSEE, IIT Bombay %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[14pt,compress]{beamer} %\documentclass[draft]{beamer} %\documentclass[compress,handout]{beamer} %\usepackage{pgfpages} %\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm] % Modified from: generic-ornate-15min-45min.de.tex \mode { \usetheme{Warsaw} \useoutertheme{infolines} \setbeamercovered{transparent} } \usepackage[english]{babel} \usepackage[latin1]{inputenc} %\usepackage{times} \usepackage[T1]{fontenc} % Taken from Fernando's slides. \usepackage{ae,aecompl} \usepackage{mathpazo,courier,euler} \usepackage[scaled=.95]{helvet} \definecolor{darkgreen}{rgb}{0,0.5,0} \usepackage{listings} \lstset{language=Python, basicstyle=\ttfamily\bfseries, commentstyle=\color{red}\itshape, stringstyle=\color{darkgreen}, showstringspaces=false, keywordstyle=\color{blue}\bfseries} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Macros \setbeamercolor{emphbar}{bg=blue!20, fg=black} \newcommand{\emphbar}[1] {\begin{beamercolorbox}[rounded=true]{emphbar} {#1} \end{beamercolorbox} } \newcounter{time} \setcounter{time}{0} \newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}} \newcommand{\typ}[1]{\textbf{\texttt{#1}}} \newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}} } %%% This is from Fernando's setup. % \usepackage{color} % \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} % % Use and configure listings package for nicely formatted code % \usepackage{listings} % \lstset{ % language=Python, % basicstyle=\small\ttfamily, % commentstyle=\ttfamily\color{blue}, % stringstyle=\ttfamily\color{orange}, % showstringspaces=false, % breaklines=true, % postbreak = \space\dots % } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Title page \title[Basic Python]{Python language: Functions, modules and objects} \author[FOSSEE Team] {The FOSSEE Group} \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} \date[] {SciPy.in 2010, Tutorials} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo} %\logo{\pgfuseimage{iitmlogo}} %% Delete this, if you do not want the table of contents to pop up at %% the beginning of each subsection: \AtBeginSubsection[] { \begin{frame} \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame} } \AtBeginSection[] { \begin{frame} \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame} } % If you wish to uncover everything in a step-wise fashion, uncomment % the following command: %\beamerdefaultoverlayspecification{<+->} %\includeonlyframes{current,current1,current2,current3,current4,current5,current6} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DOCUMENT STARTS \begin{document} \begin{frame} \titlepage \end{frame} \begin{frame} \frametitle{Outline} \tableofcontents % You might wish to add the option [pausesections] \end{frame} \section{Functions} \begin{frame}[fragile] \frametitle{Functions} \begin{itemize} \item \kwrd{def} - keyword to define a function \item Arguments are local to a function \item Functions can return multiple values \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Functions: example} \begin{lstlisting} def signum( r ): """returns 0 if r is zero -1 if r is negative +1 if r is positive""" if r < 0: return -1 elif r > 0: return 1 else: return 0 \end{lstlisting} \emphbar{Note docstrings} \end{frame} \begin{frame}[fragile] \frametitle {What does this function do?} \begin{lstlisting} def what( n ): if n < 0: n = -n while n > 0: if n % 2 == 1: return False n /= 10 return True \end{lstlisting} \end{frame} \begin{frame}[fragile] {What does this function do?} \begin{lstlisting} def what( n ): i = 1 while i * i < n: i += 1 return i * i == n, i \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle {What does this function do?} \begin{lstlisting} def what( x, n ): if n < 0: n = -n x = 1.0 / x z = 1.0 while n > 0: if n % 2 == 1: z *= x x *= x n /= 2 return z \end{lstlisting} \end{frame} \subsection{Exercises} \begin{frame}{Problem 3.1} Write a function to return the gcd of two numbers. \end{frame} \begin{frame}{Problem 3.2} Write a program to print all primitive pythagorean triads (a, b, c) where a, b are in the range 1---100 \\ A pythagorean triad $(a,b,c)$ has the property $a^2 + b^2 = c^2$.\\By primitive we mean triads that do not `depend' on others. For example, (4,3,5) is a variant of (3,4,5) and hence is not primitive. And (10,24,26) is easily derived from (5,12,13) and is also not primitive. \end{frame} \begin{frame}{Problem 3.3} Write a program that generates a list of all four digit numbers that have all their digits even and are perfect squares.\newline\\\emph{For example, the output should include 6400 but not 8100 (one digit is odd) or 4248 (not a perfect square).} % \inctime{15} \end{frame} \subsection{Default arguments} \begin{frame}[fragile] \frametitle{Functions: default arguments} \begin{lstlisting} In []: greet = 'hello world' In []: greet.split() Out[]: ['hello', 'world'] In []: line = 'Rossum, Guido, 54, 46, 55' In []: line.split(',') Out[]: ['Rossum', ' Guido', ' 54', ' 46', ' 55'] \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Functions: default arguments \ldots} \begin{lstlisting} In []: def welcome(greet, name="World"): .... print greet, name In []: welcome("Hello") Hello World In []: welcome("Hi", "Guido") Hi Guido \end{lstlisting} \end{frame} \subsection{Keyword arguments} \begin{frame}[fragile] \frametitle{Functions: Keyword arguments} We have seen the following \begin{lstlisting} legend(['sin(2y)'], loc = 'center') plot(y, sin(y), 'g', linewidth = 2) annotate('local max', xy = (1.5, 1)) pie(science.values(), labels = science.keys()) \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Functions: keyword arguments \ldots} \begin{lstlisting} In []: def welcome(greet, name="World"): .... print greet, name In []: welcome("Hello", "James") Hello James In []: welcome("Hi", name="Guido") Hi Guido In []: welcome(name="Guido", greet="Hey") Hey Guido \end{lstlisting} \end{frame} \subsection{Built-in functions} \begin{frame} {Before writing a function} \begin{itemize} \item Variety of built-in functions are available \item \typ{abs, any, all, len, max, min} \item \typ{pow, range, sum, type} \item Refer here: \url{http://docs.python.org/library/functions.html} \end{itemize} % \inctime{10} \end{frame} \section{Modules} \begin{frame}[fragile] \frametitle{\typ{from} \ldots \typ{import} magic} \begin{lstlisting} from scipy.integrate import odeint from scipy.optimize import fsolve \end{lstlisting} \emphbar{Above statements import a function to our namespace} \end{frame} \begin{frame}[fragile] \frametitle{Running scripts from command line} \small \begin{itemize} \item Fire up a terminal \item python four\_plot.py \end{itemize} \pause \begin{lstlisting} Traceback (most recent call last): File "four_plot.py", line 1, in x = linspace(-5*pi, 5*pi, 500) NameError: name 'linspace' is not defined \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Remedy \ldots} \begin{lstlisting} from scipy import * \end{lstlisting} \alert{Now run python four\_plot.py again} \end{frame} \begin{frame}[fragile] \frametitle{Now what?} \begin{lstlisting} Traceback (most recent call last): File "four_plot.py", line 1, in x = plot(x, x, 'b') NameError: name 'plot' is not defined \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Remedy \ldots} \begin{lstlisting} from pylab import * \end{lstlisting} \alert{Now run python four\_plot.py again!!} \end{frame} \begin{frame}[fragile] \frametitle{Modules} \begin{itemize} \item The \kwrd{import} keyword ``loads'' a module \item One can also use: \begin{lstlisting} In []: from scipy import * In []: from scipy import linspace \end{lstlisting} \item What is the difference? \item \alert{Use the former only in interactive mode} \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{IPython namespace} \begin{lstlisting} In [4]: whos Interactive namespace is empty. \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{IPython namespace} \begin{lstlisting} In [5]: from numpy import * In [6]: whos \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Package hierarchies} \begin{lstlisting} from scipy.integrate import odeint from scipy.optimize import fsolve \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{\typ{from} \ldots \typ{import} - conventional way!} \small \begin{lstlisting} from scipy import linspace, pi, sin from pylab import plot, legend, annotate from pylab import xlim, ylim x = linspace(-5*pi, 5*pi, 500) plot(x, x, 'b') plot(x, -x, 'b') plot(x, sin(x), 'g', linewidth=2) plot(x, x*sin(x), 'r', linewidth=3) legend(['x', '-x', 'sin(x)', 'xsin(x)']) annotate('origin', xy = (0, 0)) xlim(-5*pi, 5*pi) ylim(-5*pi, 5*pi) \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{\typ{from} \ldots \typ{import} - conventional way!} \small \begin{lstlisting} import scipy import pylab x = scipy.linspace(-5*scipy.pi, 5*scipy.pi, 500) pylab.plot(x, x, 'b') pylab.plot(x, -x, 'b') pylab.plot(x, scipy.sin(x), 'g', linewidth=2) pylab.plot(x, x*scipy.sin(x), 'r', linewidth=3) pylab.legend(['x', '-x', 'sin(x)', 'xsin(x)']) pylab.annotate('origin', xy = (0, 0)) pylab.xlim(-5*scipy.pi, 5*scipy.pi) pylab.ylim(-5*scipy.pi, 5*scipy.pi) \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{\typ{import} - the community convention} \begin{lstlisting} import numpy as np np.linspace(-5 * np.pi, 5 * np.pi, 500) import scipy as sp sp.linspace(-5 * sp.pi, 5 * sp.pi, 500) \end{lstlisting} \end{frame} \begin{frame} \frametitle{Modules: Standard library} \begin{itemize} \item Very powerful, ``Batteries included'' \item Some standard modules: \begin{itemize} \item Math: \typ{math}, \typ{random} \item Internet access: \typ{urllib2}, \typ{smtplib} \item System, Command line arguments: \typ{sys} \item Operating system interface: \typ{os} \item Regular expressions: \typ{re} \item Compression: \typ{gzip}, \typ{zipfile}, and \typ{tarfile} \item And a whole lot more! \end{itemize} \item Check out the Python Library reference: \url{http://docs.python.org/library/} \end{itemize} % \inctime{5} \end{frame} \begin{frame}[fragile] \frametitle{Modules of special interest} \begin{description}[matplotlibfor2d] \item[\typ{pylab}] Easy, interactive, 2D plotting \item[\typ{scipy}] arrays, statistics, optimization, integration, linear algebra, Fourier transforms, signal and image processing, genetic algorithms, ODE solvers, special functions, and more \item[\typ{mayavi}] Easy, interactive, 3D plotting \end{description} \end{frame} \begin{frame}[fragile] \frametitle{From which module?} This plot function in pylab is cool, from where do I import it to include it in my\_nifty\_module.py? \end{frame} \begin{frame}[fragile] \frametitle{From which module?} \begin{lstlisting} In [15]: plot.__module__ Out[15]: 'matplotlib.pyplot' from matplotlib.pyplot import plot \end{lstlisting} \end{frame} \section{Objects} \begin{frame}{Everything is an Object!} \begin{itemize} \item \typ{int} \item \typ{float} \item \typ{str} \item \typ{list} \item \typ{tuple} \item \typ{string} \item \typ{dictionary} \item \typ{function} \item User defined class is also an object! \end{itemize} \end {frame} \begin{frame}[fragile] \frametitle{Using Objects} \begin{itemize} \item Creating Objects \begin{itemize} \item Initialization \end{itemize} \begin{lstlisting} In []: a = str() In []: b = "Hello World" \end{lstlisting} \item Object Manipulation \begin{itemize} \item Object methods \item ``.'' operator \end{itemize} \begin{lstlisting} In []: "Hello World".split() Out[]: ['Hello', 'World'] \end{lstlisting} \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Objects provide consistency} \small \begin{lstlisting} for element in (1, 2, 3): print element for key in {'one':1, 'two':2}: print key for char in "123": print char for line in open("myfile.txt"): print line for line in urllib2.urlopen('http://site.com'): print line \end{lstlisting} % \inctime{10} \end{frame} \begin{frame} \frametitle{What did we learn?} \begin{itemize} \item Functions: Definition \item Functions: Docstrings \item Functions: Default and Keyword arguments \item Modules \item Objects \end{itemize} \end{frame} \end{document} %% Questions for Quiz %% %% ------------------ %% \begin{frame} \frametitle{\incqno} How many items can a function return? \end{frame}