summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrabhu Ramachandran2017-02-20 18:26:55 +0530
committerPrabhu Ramachandran2017-02-20 18:26:55 +0530
commitb234e1bef428cf79bd0c50a37df8331a2890656b (patch)
treeb84c49ea43c04013ad7f367edc88eae4469376e4
parent3abe78ca1ffbdbaed9e9a25e97bed5d609962835 (diff)
downloadpython-workshops-b234e1bef428cf79bd0c50a37df8331a2890656b.tar.gz
python-workshops-b234e1bef428cf79bd0c50a37df8331a2890656b.tar.bz2
python-workshops-b234e1bef428cf79bd0c50a37df8331a2890656b.zip
Adding content on modules.
-rw-r--r--basic_python/modules.tex278
1 files changed, 278 insertions, 0 deletions
diff --git a/basic_python/modules.tex b/basic_python/modules.tex
new file mode 100644
index 0000000..57f720d
--- /dev/null
+++ b/basic_python/modules.tex
@@ -0,0 +1,278 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Tutorial slides on Python.
+%
+% Author: FOSSEE
+% Copyright (c) 2017, FOSSEE, IIT Bombay
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[14pt,compress]{beamer}
+\input{macros.tex}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Title page
+\title[Modules]{Python language: modules}
+
+\author[FOSSEE Team] {The FOSSEE Group}
+
+\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
+\date[] {Mumbai, India}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DOCUMENT STARTS
+\begin{document}
+
+\begin{frame}
+ \titlepage
+\end{frame}
+
+\section{Python modules}
+
+\begin{frame}
+ \frametitle{Modules}
+ \begin{itemize}
+ \item Organize your code
+ \item Collect similar functionality
+ \item Functions, classes, constants, etc.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Modules}
+ \begin{itemize}
+ \item Define variables, functions and classes in a file with a
+ \texttt{.py} extension
+ \item This file becomes a module!
+ \item File name should be valid variable name
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Modules \ldots}
+ \begin{itemize}
+ \item The \typ{import} keyword ``loads'' a module
+ \item One can also use:
+ \mbox{\typ{from module import name1, name2}}\\
+ where \typ{name1} etc. are names in the module, \typ{module}
+ \item \typ{from module import *} \ --- imports everything from module,
+ \alert{use only in interactive mode}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Note on module file names}
+ \begin{itemize}
+ \item Should start with a letter or underscore
+ \item Can use \typ{\_} (underscore) and numbers
+ \item No \typ{.} allowed
+ \item No spaces or special characters
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Test}
+ \begin{itemize}
+ \item \typ{1\_script.py}
+ \item \typ{script\_1.py}
+ \item \typ{one11.py}
+ \item \typ{\_one11.py}
+ \item \typ{one script.py}
+ \item \typ{one,script;xxx.py}
+ \item \typ{one.two.py}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Modules: example}
+ \begin{lstlisting}
+# --- fib.py ---
+some_var = 1
+def fib(n):
+ """Print Fibonacci series up to n.
+ """
+ a, b = 0, 1
+ while b < n:
+ print(b, end=' ')
+ a, b = b, a+b
+# EOF
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Modules: example}
+ \begin{lstlisting}
+>>> import fib
+>>> fib.fib(10)
+1 1 2 3 5 8
+>>> fib.some_var
+1
+ \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 Modules can be in any one of the locations
+ \item Current working directory is one of the locations
+ \item Can also set \texttt{PYTHONPATH} env var
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Running a module}
+ \begin{itemize}
+ \item Let us say we want to run some code in \typ{fib.py} so we get:
+ \end{itemize}
+ \begin{lstlisting}
+ $ python fib.py
+ 1 1 2 3 5 8
+ \end{lstlisting} %$
+
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Modules: Running a module}
+ \begin{lstlisting}
+# --- fib.py ---
+some_var = 1
+def fib(n):
+ """Print Fibonacci series up to n.
+ """
+ a, b = 0, 1
+ while b < n:
+ print(b, end=' ')
+ a, b = b, a+b
+
+fib(10)
+# EOF
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Modules: example}
+ \begin{lstlisting}
+>>> import fib
+1 1 2 3 5 8
+\end{lstlisting}
+
+\begin{itemize}
+\item So the code is called even when we import the module
+\item We do not want this!
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Using \texttt{\_\_name\_\_}}
+ \begin{lstlisting}
+ import fib
+ \end{lstlisting}
+ \begin{itemize}
+ \item The import is successful
+ \item But \typ{fib(10)}, gets run
+ \pause
+ \item Add it to the following \texttt{if} block
+ \end{itemize}
+ \begin{lstlisting}
+ if __name__ == "__main__":
+ fib(10)
+ \end{lstlisting}
+ \begin{itemize}
+ \item Now the script runs properly
+ \item As well as the import works; the code is 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}
+
+
+\begin{frame}[fragile]
+ \frametitle{Modules: using \typ{\_\_name\_\_}}
+ \vspace*{-1ex}
+ \begin{lstlisting}
+# --- fib.py ---
+def fib(n):
+ """Print Fibonacci series up to n.
+ """
+ a, b = 0, 1
+ while b < n:
+ print(b, end=' ')
+ a, b = b, a+b
+
+print(__name__)
+if __name__ == '__main__':
+ fib(10)
+# EOF
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Modules: using \typ{\_\_name\_\_}}
+ \begin{lstlisting}
+ >>> import fib
+ \end{lstlisting}
+ Try this:
+ \begin{lstlisting}
+ $ python fib.py
+ \end{lstlisting} %$
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Stand-alone scripts}
+Consider a file \texttt{f.py}:
+\footnotesize
+\begin{lstlisting}
+#!/usr/bin/env python
+"""Module level documentation."""
+# First line tells the shell that it should use Python
+# to interpret the code in the file.
+def f():
+ print "f"
+
+# Check if we are running standalone or as module.
+# When imported, __name__ will not be '__main__'
+if __name__ == '__main__':
+ # This is not executed when f.py is imported.
+ f()
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Standard library}
+ \begin{itemize}
+ \item Operating system interface: \typ{os}, \typ{os.path}
+ \item System, Command line arguments: \typ{sys}
+ \item Regular expressions: \typ{re}
+ \item Math: \typ{math}, \typ{random}
+ \item Internet access: \typ{urllib}, \typ{smtplib}
+ \item Data compression: \typ{zlib}, \typ{gzip}, \typ{bz2},
+ \typ{zipfile}, and \typ{tarfile}
+ \item Unit testing: \typ{doctest} and \typ{unittest}
+ \item And a whole lot more!
+ \item Check out the Python Library reference:
+ \url{http://docs.python.org/lib/lib.html}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Summary}
+ \begin{itemize}
+ \item Creating modules
+ \item Importing modules
+ \item Running modules as scripts
+ \item \texttt{\_\_name\_\_}
+ \end{itemize}
+\end{frame}
+
+\end{document}