diff options
Diffstat (limited to 'basic_python/slides/func.tex')
-rw-r--r-- | basic_python/slides/func.tex | 222 |
1 files changed, 127 insertions, 95 deletions
diff --git a/basic_python/slides/func.tex b/basic_python/slides/func.tex index f0ed1a5..b66be06 100644 --- a/basic_python/slides/func.tex +++ b/basic_python/slides/func.tex @@ -20,11 +20,12 @@ \item Let's write a Python function, equivalent to this \end{itemize} \begin{lstlisting} - def f(x): - return x*x + In[]: def f(x): + ....: return x*x + ....: - f(1) - f(2) + In[]: f(1) + In[]: f(2) \end{lstlisting} \begin{itemize} \item \texttt{def} is a keyword @@ -38,10 +39,11 @@ \begin{frame}[fragile] \frametitle{Defining functions \ldots} \begin{lstlisting} - def greet(): - print "Hello World!" + In[]: def greet(): + ....: print "Hello World!" + ....: - greet() + In[]: greet() \end{lstlisting} \begin{itemize} \item \texttt{greet} is a function that takes no arguments @@ -49,10 +51,11 @@ \item But implicitly, Python returns \texttt{None} \end{itemize} \begin{lstlisting} - def avg(a, b): - return (a + b)/2 - - avg(12, 10) + In[]: def avg(a, b): + ....: return (a + b)/2 + ....: + + In[]: avg(12, 10) \end{lstlisting} \end{frame} @@ -63,14 +66,15 @@ \item We write a doc-string along with the function definition \end{itemize} \begin{lstlisting} - def avg(a, b): - """ avg takes two numbers as input - and returns their average""" + In[]: def avg(a, b): + """ avg takes two numbers as input + and returns their average""" - return (a + b)/2 + ....: return (a + b)/2 + ....: - avg? - greet? + In[]: avg? + In[]: greet? \end{lstlisting} \end{frame} @@ -81,19 +85,20 @@ \item Function needs to return two values \end{itemize} \begin{lstlisting} - def circle(r): - """returns area and perimeter of a - circle given, the radius r""" - - pi = 3.14 - area = pi * r * r - perimeter = 2 * pi * r - return area, perimeter - - circle(4) - a, p = circle(6) - print a - print p + In[]: def circle(r): + """returns area and perimeter of a + circle given, the radius r""" + + ....: pi = 3.14 + ....: area = pi * r * r + ....: perimeter = 2 * pi * r + ....: return area, perimeter + ....: + + In[]: circle(4) + In[]: a, p = circle(6) + In[]: print a + In[]: print p \end{lstlisting} \begin{itemize} \item Any number of values can be returned @@ -103,24 +108,26 @@ \begin{frame}[fragile] \frametitle{What? -- 1} \begin{lstlisting} - def what( n ): - if n < 0: n = -n - while n > 0: - if n % 2 == 1: - return False - n /= 10 - return True + In[]: def what( n ): + ....: if n < 0: n = -n + ....: while n > 0: + ....: if n % 2 == 1: + ....: return False + ....: n /= 10 + ....: return True + ....: \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{What? -- 2} \begin{lstlisting} - def what( n ): - i = 1 - while i * i < n: - i += 1 - return i * i == n, i + In[]: def what( n ): + ....: i = 1 + ....: while i * i < n: + ....: i += 1 + ....: return i * i == n, i + ....: \end{lstlisting} \end{frame} @@ -129,50 +136,53 @@ \begin{frame}[fragile] \frametitle{Default arguments} \begin{lstlisting} - round(2.484) - round(2.484, 2) + In[]: round(2.484) + In[]: round(2.484, 2) - s.split() # split on spaces - s.split(';') # split on ';' + In[]: s.split() # split on spaces + In[]: s.split(';') # split on ';' - range(10) # returns numbers from 0 to 9 - range(1, 10) # returns numbers from 1 to 9 - range(1, 10, 2) # returns odd numbers from 1 to 9 + In[]: range(10) # returns numbers from 0 to 9 + In[]: range(1, 10) # returns numbers from 1 to 9 + In[]: range(1, 10, 2) # returns odd numbers from 1 to 9 \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Default arguments \ldots} \begin{lstlisting} - def welcome(greet, name="World"): - print greet, name + In[]: def welcome(greet, name="World"): + ....: print greet, name + ....: - welcome("Hi", "Guido") - welcome("Hello") + In[]: welcome("Hi", "Guido") + In[]: welcome("Hello") \end{lstlisting} \begin{itemize} \item Arguments with default values, should be placed at the end \item The following definition is \alert{WRONG} \end{itemize} \begin{lstlisting} - def welcome(name="World", greet): - print greet, name + In[]: def welcome(name="World", greet): + ....: print greet, name + ....: \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Keyword Arguments} \begin{lstlisting} - def welcome(greet, name="World"): - print greet, name + In[]: def welcome(greet, name="World"): + ....: print greet, name + ....: - welcome("Hello", "James") + In[]: welcome("Hello", "James") - welcome("Hi", name="Guido") + In[]: welcome("Hi", name="Guido") - welcome(name="Guido", greet="Hey") + In[]: welcome(name="Guido", greet="Hey") - welcome(name="Guido", "Hey") + In[]: welcome(name="Guido", "Hey") \end{lstlisting} \end{frame} @@ -192,39 +202,58 @@ \begin{frame}[fragile] \frametitle{Arguments are local} \begin{lstlisting} - def change(q): - q = 10 - print q + In[]: def change(q): + ....: q = 10 + ....: print q + ....: - change(1) - print q + In[]: change(1) + In[]: print q \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Variables inside function are local} \begin{lstlisting} - n = 5 - def change(): - n = 10 - print n - change() - print n + In[]: n = 5 + In[]: def change(): + ....: n = 10 + ....: print n + ....: + In[]: change() + In[]: print n \end{lstlisting} \begin{itemize} \item Use the \texttt{global} statement to assign to global variables \end{itemize} \begin{lstlisting} - def change(): - global n - n = 10 - print n - change() - print n + In[]: def change(): + ....: global n + ....: n = 10 + ....: print n + ....: + In[]: change() + In[]: print n \end{lstlisting} \end{frame} \begin{frame}[fragile] + \frametitle{global} + \begin{itemize} + \item Use the \texttt{global} statement to assign to global variables + \end{itemize} + \begin{lstlisting} + In[]: def change(): + ....: global n + ....: n = 10 + ....: print n + ....: + In[]: change() + In[]: print n + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] \frametitle{Mutable variables} \begin{itemize} \item Behavior is different when assigning to a list element/slice @@ -232,31 +261,34 @@ until the name is found \end{itemize} \begin{lstlisting} - name = ['Mr.', 'Steve', 'Gosling'] - def change_name(): - name[0] = 'Dr.' - change_name() - print name + In[]: name = ['Mr.', 'Steve', 'Gosling'] + In[]: def change_name(): + ....: name[0] = 'Dr.' + ....: + In[]: change_name() + In[]: print name \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Passing Arguments \ldots} \begin{lstlisting} - n = 5 - def change(n): - n = 10 - print "n = %s inside change " %n - change(n) - print n + In[]: n = 5 + In[]: def change(n): + ....: n = 10 + ....: print "n = %s inside change " %n + ....: + In[]: change(n) + In[]: print n \end{lstlisting} \begin{lstlisting} - name = ['Mr.', 'Steve', 'Gosling'] - def change_name(n): - n[0] = 'Dr.' - print "n = %s inside change_name" %n - change_name(name) - print name + In[]: name = ['Mr.', 'Steve', 'Gosling'] + In[]: def change_name(n): + ....: n[0] = 'Dr.' + ....: print "n = %s inside change_name" %n + ....: + In[]: change_name(name) + In[]: print name \end{lstlisting} \end{frame} |