diff -r 8ca53181bee6 -r f657495cf8b2 day1/Session-4.tex --- a/day1/Session-4.tex Thu Oct 08 19:45:43 2009 +0530 +++ b/day1/Session-4.tex Fri Oct 09 12:59:55 2009 +0530 @@ -112,7 +112,7 @@ \titlepage \end{frame} -\section{Advanced Data structures, Functions and Debugging} +\section{Advanced Data structures} \subsection{Dictionary} \begin{frame}{Dictionary} @@ -120,7 +120,7 @@ \item lists and tuples index: 0 \ldots n \item dictionaries index using strings \item \typ{ d = \{ ``Hitchhiker's guide'' : 42, ``Terminator'' : ``I'll be back''\}} - \item \typ{d[``Terminator'']\\``I'll be back''} + \item \typ{d[``Terminator''] => ``I'll be back''} \item aka associative array, key-value pair, hashmap, hashtable \ldots \item what can be keys? \end{itemize} @@ -131,7 +131,7 @@ \item \alert{Unordered} \begin{block}{Standard usage} for key in dict:\\ - dict[key] \# => value + \ \ \ \ print dict[key] \end{block} \item \typ{d.keys()} returns a list \item can we have duplicate keys? @@ -189,7 +189,6 @@ \inctime{5} \end{frame} - \begin{frame} \frametitle{Problem set 6.2} \begin{description} @@ -199,7 +198,8 @@ \inctime{10} \end{frame} -\subsection{Functions Reloaded!} + +\section{Functions Reloaded!} \begin{frame}[fragile] \frametitle{Advanced functions} \begin{itemize} @@ -211,6 +211,7 @@ \end{itemize} \end{frame} +\subsection{Default arguments} \begin{frame}[fragile] \frametitle{Functions: default arguments} \small @@ -230,6 +231,7 @@ \end{lstlisting} \end{frame} +\subsection{Keyword arguments} \begin{frame}[fragile] \frametitle{Functions: keyword arguments} \small @@ -251,7 +253,7 @@ \inctime{15} \end{frame} -\subsection{Functional programming} +\section{Functional programming} \begin{frame}[fragile] \frametitle{Functional programming} \begin{itemize} @@ -263,6 +265,7 @@ \end{itemize} \end{frame} +\subsection{List comprehensions} \begin{frame}[fragile] \frametitle{List Comprehensions} Lets say we want to squares of all the numbers from 1 to 100 @@ -294,11 +297,22 @@ if i % 10 in [1, 2, 5, 7]] \end{lstlisting} Which is more readable? +\end{frame} + +\begin{frame}[fragile] + \frametitle{map() function} + map() function accomplishes the same as list comprehensions + \begin{lstlisting} +>>> def square(x): return x*x +... +>>> map(square, range(1, 100)) +[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] + \end{lstlisting} \inctime{15} \end{frame} - -\subsection{Debugging} +\section{Debugging} +\subsection{Errors and Exceptions} \begin{frame}[fragile] \frametitle{Errors} \begin{lstlisting} @@ -340,6 +354,7 @@ \end{lstlisting} \end{frame} +\subsection{Strategy} \begin{frame}[fragile] \frametitle{Debugging effectively} \begin{itemize} @@ -352,7 +367,7 @@ \begin{frame}[fragile] \frametitle{Debugging effectively} \begin{itemize} - \item Using \typ{\%debug} and \typ{\%pdb} in IPython + \item Using \typ{\%debug} in IPython \end{itemize} \end{frame} @@ -364,33 +379,51 @@ In [2]: mymodule.test() --------------------------------------------- NameError Traceback (most recent call last) -/media/python/iitb/workshops/day1/ in () -/media/python/iitb/workshops/day1/mymodule.py in test() + in () +mymodule.py in test() 1 def test(): ----> 2 print spam NameError: global name 'spam' is not defined + In [3]: %debug -> /media/python/iitb/workshops/day1/mymodule.py(2)test() +> mymodule.py(2)test() 0 print spam ipdb> \end{lstlisting} \inctime{15} \end{frame} +\subsection{Exercise} \begin{frame}[fragile] \frametitle{Debugging: Exercise} +\small +\begin{lstlisting} +import keyword +f = open('/path/to/file') + +freq = {} +for line in f: + words = line.split() + for word in words: + key = word.strip(',.!;?()[]: ') + if keyword.iskeyword(key): + value = freq[key] + freq[key] = value + 1 + +print freq +\end{lstlisting} \inctime{10} \end{frame} \begin{frame} \frametitle{What did we learn?} \begin{itemize} - \item Creating and using Dictionaries - \item Creating and using Sets - \item Advances Functions: default arguments, keyword arguments + \item Dictionaries + \item Sets + \item Default and keyword arguments \item Functional Programming, list comprehensions \item Errors and Exceptions in Python - \item Debugging: \%pdb and \%debug in IPython + \item Debugging: \%debug in IPython \end{itemize} \end{frame} \end{document}