summaryrefslogtreecommitdiff
path: root/advanced_python/slides/modules.tex
diff options
context:
space:
mode:
authorPuneeth Chaganti2011-04-18 12:21:06 +0530
committerPuneeth Chaganti2011-04-18 12:21:06 +0530
commitc562712666400d405605a4e8f2f35421f0c17458 (patch)
tree14c76d27666b5931512070fab86ef4457d97176a /advanced_python/slides/modules.tex
parentffbad34318ed5b0d94a17e57df28c66d2bce7398 (diff)
downloadsees-c562712666400d405605a4e8f2f35421f0c17458.tar.gz
sees-c562712666400d405605a4e8f2f35421f0c17458.tar.bz2
sees-c562712666400d405605a4e8f2f35421f0c17458.zip
adv_py: Add notes, slides and a few exercises.
Diffstat (limited to 'advanced_python/slides/modules.tex')
-rw-r--r--advanced_python/slides/modules.tex163
1 files changed, 163 insertions, 0 deletions
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}
+