--- a/day1/Session-4.tex~ Wed Oct 07 00:50:06 2009 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,378 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Tutorial slides on Python.
-%
-% Author: Prabhu Ramachandran <prabhu at aero.iitb.ac.in>
-% Copyright (c) 2005-2008, Prabhu Ramachandran
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\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<presentation>
-{
- \usetheme{Warsaw}
- \useoutertheme{split}
- \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]{\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:\\Advanced Python data structures, Functions and Debugging}
-
-\author[FOSSEE Team] {Asokan Pichai\\Prabhu Ramachandran}
-
-\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
-\date[] {10, October 2009}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%\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}<beamer>
- \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}
-
-\section{Python}
-
-\subsection{Dictionary}
-\begin{frame}{Dictionary}
- \begin{itemize}
- \item aka associative arrays, key-value pairs, hashmaps, hashtables \ldots
- \item \typ{ d = \{ ``Hitchhiker's guide'' : 42, ``Terminator'' : ``I'll be back''\}}
- \item lists and tuples index: 0 \ldots n
- \item dictionaries index using strings
- \item aka key-value pairs
- \item what can be keys?
- \end{itemize}
-\end{frame}
-
-\begin{frame}{Dictionary \ldots }
- \begin{itemize}
- \item \alert{Unordered}
- \begin{block}{Standard usage}
- for key in dict:\\
- <use> dict[key] \# => value
- \end{block}
- \item \typ{d.keys()} returns a list
- \item can we have duplicate keys?
- \end{itemize}
- \inctime{5}
-\end{frame}
-
-\begin{frame} {Problem Set 2.1}
- \begin{description}
-\item[2.1.1] You are given date strings of the form ``29, Jul 2009'', or ``4 January 2008''. In other words a number a string and another number, with a comma sometimes separating the items.Write a function that takes such a string and returns a tuple (yyyy, mm, dd) where all three elements are ints.
- \item[2.1.2] Count word frequencies in a file.
- \item[2.1.3] Find the most used Python keywords in your Python code (import keyword).
-\end{description}
-
-\inctime{10}
-\end{frame}
-
-\subsection{Set}
-\begin{frame}[fragile]
- \frametitle{Set}
- \begin{itemize}
- \item Simplest container, mutable
- \item No ordering, no duplicates
- \item usual suspects: union, intersection, subset \ldots
- \item >, >=, <, <=, in, \ldots
- \end{itemize}
- \begin{lstlisting}
->>> f10 = set([1,2,3,5,8])
->>> p10 = set([2,3,5,7])
->>> f10|p10
-set([1, 2, 3, 5, 7, 8])
->>> f10&p10
-set([2, 3, 5])
->>> f10-p10
-set([8, 1])
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Set}
- \begin{lstlisting}
->>> p10-f10, f10^p10
-set([7]), set([1, 7, 8])
->>> set([2,3]) < p10
-True
->>> set([2,3]) <= p10
-True
->>> 2 in p10
-True
->>> 4 in p10
-False
->>> len(f10)
-5
-\end{lstlisting}
-\inctime{5}
-\end{frame}
-
-
-\begin{frame}
- \frametitle{Problem set 2.2}
- \begin{description}
- \item[2.2.1] Given a dictionary of the names of students and their marks, identify how many duplicate marks are there? and what are these?
- \item[2.2.2] Given a string of the form ``4-7, 9, 12, 15'' find the numbers missing in this list for a given range.
-\end{description}
-\inctime{10}
-\end{frame}
-
-\subsection{Functions Reloaded!}
-\begin{frame}[fragile]
- \frametitle{Advanced functions}
- \begin{itemize}
- \item default args
- \item var args
- \item keyword args
- \item scope
- \item \typ{global}
- \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Functions: default arguments}
- \small
- \begin{lstlisting}
-def ask_ok(prompt, retries=4,
- complaint='Yes or no!'):
- while True:
- ok = raw_input(prompt)
- if ok in ('y', 'ye', 'yes'):
- return True
- if ok in ('n', 'no', 'nop',
- 'nope'):
- return False
- retries = retries - 1
- if retries < 0:
- raise IOError, 'bad user'
- print complaint
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Functions: keyword arguments}
- \small
- \begin{lstlisting}
-def parrot(voltage, state='a stiff',
- action='voom', type='Royal Blue'):
- print "-- This parrot wouldn't", action,
- print "if you supply", voltage, "Volts."
- print "-- Lovely plumage, the", type
- print "-- It's", state, "!"
-
-parrot(1000)
-parrot(action = 'VOOOOOM', voltage = 1000000)
-parrot('a thousand',
- state = 'pushing up the daisies')
-parrot('a million', 'bereft of life', 'jump')
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Functions: arbitrary argument lists}
- \begin{itemize}
- \item Arbitrary number of arguments using \verb+*args+ or
- \verb+*whatever+
- \item Keyword arguments using \verb+**kw+
- \item Given a tuple/dict how do you call a function?
- \begin{itemize}
- \item Using argument unpacking
- \item For positional arguments: \verb+foo(*[5, 10])+
- \item For keyword args: \verb+foo(**{'a':5, 'b':10})+
- \end{itemize}
- \end{itemize}
-\end{frame}
-
- \begin{frame}[fragile]
-\begin{lstlisting}
-def foo(a=10, b=100):
- print a, b
-def func(*args, **keyword):
- print args, keyword
-# Unpacking:
-args = [5, 10]
-foo(*args)
-kw = {'a':5, 'b':10}
-foo(**kw)
-\end{lstlisting}
- \inctime{15}
-\end{frame}
-
-\subsection{Functional programming}
-\begin{frame}[fragile]
- \frametitle{Functional programming}
-What is the basic idea?\\
-Why is it interesting?\\
-\typ{map, reduce, filter}\\
-list comprehension\\
-generators
- \inctime{15}
-\end{frame}
-
-\subsection{Debugging}
-\begin{frame}[fragile]
- \frametitle{Errors}
- \begin{lstlisting}
->>> while True print 'Hello world'
- File "<stdin>", line 1, in ?
- while True print 'Hello world'
- ^
-SyntaxError: invalid syntax
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Exceptions}
- \begin{lstlisting}
->>> print spam
-Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
-NameError: name 'spam' is not defined
-
->>> 1 / 0
-Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
-ZeroDivisionError: integer division
-or modulo by zero
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Debugging effectively}
-
- \begin{itemize}
- \item \kwrd{print} based strategy
- \item Process: Hypothesis, test, refine, rinse-repeat
- \item Using \typ{\%debug} and \typ{\%pdb} in IPython
- \end{itemize}
- \inctime{15}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Debugging: example}
-\small
-\begin{lstlisting}
->>> import pdb
->>> import mymodule
->>> pdb.run('mymodule.test()')
-> <string>(1)<module>()
-(Pdb) continue
-Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- File "/usr/lib/python2.6/pdb.py", line 1207, in run
- Pdb().run(statement, globals, locals)
- File "/usr/lib/python2.6/bdb.py", line 368, in run
- exec cmd in globals, locals
- File "<string>", line 1, in <module>
- File "mymodule.py", line 2, in test
- print spam
-NameError: global name 'spam' is not defined
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Debugging in IPython}
-\small
-\begin{lstlisting}
-In [1]: %pdb
-Automatic pdb calling has been turned ON
-In [2]: import mymodule
-In [3]: mymodule.test()
-----------------------------------------------
-NameError Traceback (most recent call last)
-/media/python/iitb/workshops/day1/<ipython console> in <module>()
-/media/python/iitb/workshops/day1/mymodule.pyc in test()
- 1 def test():
-----> 2 print spam
-NameError: global name 'spam' is not defined
-> /media/python/iitb/workshops/day1/mymodule.py(2)test()
- 0 print spam
-ipdb>
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Debugging: Exercise}
-\end{frame}
-
-\end{document}