From c562712666400d405605a4e8f2f35421f0c17458 Mon Sep 17 00:00:00 2001
From: Puneeth Chaganti
Date: Mon, 18 Apr 2011 12:21:06 +0530
Subject: adv_py: Add notes, slides and a few exercises.

---
 advanced_python/slides/modules.tex | 163 +++++++++++++++++++++++++++++++++++++
 1 file changed, 163 insertions(+)
 create mode 100644 advanced_python/slides/modules.tex

(limited to 'advanced_python/slides/modules.tex')

diff --git a/advanced_python/slides/modules.tex b/advanced_python/slides/modules.tex
new file mode 100644
index 0000000..ecc5ce8
--- /dev/null
+++ b/advanced_python/slides/modules.tex
@@ -0,0 +1,163 @@
+\section{Using Python modules}
+
+\begin{frame}[fragile]
+  \frametitle{\texttt{hello.py}}
+    \begin{itemize}
+    \item Script to print `hello world' -- \texttt{hello.py}
+    \end{itemize}
+    \begin{lstlisting}
+      print "Hello world!"
+    \end{lstlisting}
+    \begin{itemize}
+    \item We have been running scripts from IPython
+    \end{itemize}
+    \begin{lstlisting}
+      %run -i hello.py
+    \end{lstlisting}
+    \begin{itemize}
+    \item Now, we run from the shell using python
+    \end{itemize}
+    \begin{lstlisting}
+      $ python hello.py
+    \end{lstlisting} %$
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Simple plot}
+  \begin{itemize}
+  \item Save the following in \texttt{sine\_plot.py} 
+  \end{itemize}
+  \begin{lstlisting}
+    x = linspace(-2*pi, 2*pi, 100)
+    plot(x, sin(x))
+    show()
+  \end{lstlisting}
+  \begin{itemize}
+  \item Now, let us run the script
+  \end{itemize}
+  \begin{lstlisting}
+    $ python sine_plot.py
+  \end{lstlisting} % $
+  \begin{itemize}
+  \item What's wrong?
+  \end{itemize}
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Importing}
+  \begin{itemize}
+  \item \texttt{-pylab} is importing a lot of functionality
+  \item Add the following to the top of your file
+  \end{itemize}
+  \begin{lstlisting}
+    from scipy import *
+  \end{lstlisting}
+  \begin{lstlisting}
+    $ python sine_plot.py
+  \end{lstlisting} % $
+  \begin{itemize}
+  \item Now, plot is not found
+  \item Add the following as the second line of your script
+  \end{itemize}
+  \begin{lstlisting}
+    from pylab import *
+  \end{lstlisting}
+  \begin{lstlisting}
+    $ python sine_plot.py
+  \end{lstlisting} % $
+  \begin{itemize}
+  \item It works!
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Importing \ldots}
+  \begin{itemize}
+  \item \texttt{*} imports everything from \texttt{scipy} and
+    \texttt{pylab}
+  \item But, It imports lot of unnecessary stuff
+  \item And two modules may contain the same name, causing a conflict
+  \item There are two ways out
+  \end{itemize}
+  \begin{lstlisting}
+    from scipy import linspace, pi, sin
+    from pylab import plot, show
+  \end{lstlisting}
+  \begin{itemize}
+  \item OR change the imports to following and 
+  \item Replace \texttt{pi} with \texttt{scipy.pi}, etc. 
+  \end{itemize}
+  \begin{lstlisting}
+    import scipy
+    import pylab
+  \end{lstlisting}
+\end{frame}
+
+\section{Writing modules}
+
+\begin{frame}[fragile]
+  \frametitle{GCD script}
+  \begin{itemize}
+  \item Function that computes gcd of two numbers
+  \item Save it as \texttt{gcd\_scrip.py}
+  \end{itemize}
+  \begin{lstlisting}
+    def gcd(a, b):
+        while b:
+            a, b = b, a%b
+        return a
+  \end{lstlisting}
+  \begin{itemize}
+  \item Also add the tests to the file
+  \end{itemize}
+  \begin{lstlisting}
+    if gcd(40, 12) == 4 and gcd(12, 13) == 1:
+        print "Everything OK"
+    else:
+        print "The GCD function is wrong"
+  \end{lstlisting}
+  \begin{lstlisting}
+    $ python gcd_script.py
+  \end{lstlisting} % $
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Python path}
+  \begin{itemize}
+  \item In IPython type the following
+  \end{itemize}
+  \begin{lstlisting}
+    import sys
+    sys.path
+  \end{lstlisting}
+  \begin{itemize}
+  \item List of locations where python searches for a module
+  \item \texttt{import sys} -- searches for file \texttt{sys.py} or
+    dir \texttt{sys} in all these locations
+  \item So, our own modules can be in any one of the locations
+  \item Current working directory is one of the locations
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{\texttt{\_\_name\_\_}}
+  \begin{lstlisting}
+    import gcd_script
+  \end{lstlisting}
+  \begin{itemize}
+  \item The import is successful
+  \item But the test code, gets run
+  \item Add the tests to the following \texttt{if} block
+  \end{itemize}
+  \begin{lstlisting}
+    if __name__ == "__main__":
+  \end{lstlisting}
+  \begin{itemize}
+  \item Now the script runs properly 
+  \item As well as the import works; test code not executed
+  \item \texttt{\_\_name\_\_} is local to every module and is equal
+    to \texttt{\_\_main\_\_} only when the file is run as a script.
+  \end{itemize}
+\end{frame}
+
-- 
cgit 

