getting-started-with-functions/script.rst
author Puneeth Chaganti <punchagan@fossee.in>
Thu, 11 Nov 2010 09:34:21 +0530
changeset 463 192559461dcb
parent 444 1aa91f8d8d59
child 484 a1828587a617
permissions -rw-r--r--
Reviewed getting started with functions.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
     1
.. Objectives
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
     2
.. ----------
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
     3
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
     4
.. 8.1 LO: getting started with functions (3)
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
     5
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
     6
.. At the end of this tutorial, you will be able to 
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
     7
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
     8
.. 1. define function
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
     9
.. #. define functions with arguments
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    10
.. #. learn about docstrings
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    11
.. #. learn about return values
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    12
..     can return multiple values
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    13
.. #. read code
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    14
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    15
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    16
.. Prerequisites
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    17
.. -------------
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    18
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    19
..   1. should have ``ipython`` installed. 
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    20
..   #. getting started with ``ipython``.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    21
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    22
     
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    23
.. Author              : Anoop Jacob Thomas <anoop@fossee.in>
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    24
   Internal Reviewer   : 
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    25
   External Reviewer   :
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    26
   Checklist OK?       : <put date stamp here, if OK> [2010-10-05]
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    27
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    28
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    29
==============================
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    30
Getting started with functions
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    31
==============================
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    32
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    33
{{{ show welcome slide }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    34
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    35
Hello and welcome to the tutorial, getting started with functions.
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    36
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    37
{{{ switch to next slide, outline slide }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    38
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    39
In this tutorial we will learn about functions in python, how to
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    40
define functions, passing arguments to functions, docstrings, and
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    41
function return value.
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    42
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    43
{{{ switch to next slide, Function }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    44
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    45
While writing code, we would like to reduce the number of lines of
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    46
code and using functions is a way of reusing the code.  A function is
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    47
a portion of code within a larger program that performs a specific
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    48
task and is relatively independent of the remaining code. Now let us
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    49
get more familiar with functions,
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    50
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    51
{{{ switch to next slide, f(x) a mathematical function }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    52
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    53
Consider a mathematical function f(x) = x squared. Here x is a
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    54
variable and with different values of x the value of function will
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    55
change. When x is one f(1) will return the value 1 and f(2) will
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    56
return us the value 4. Let us now see how to define the function f(x)
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    57
in Python.
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    58
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    59
{{{ switch to next slide, define f(x) in Python }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    60
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    61
In your Ipython interpreter type the following,
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    62
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    63
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    64
    def f(x):
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    65
    	return x*x
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    66
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    67
Let us see, if the function ``f``, we defined, works as we expect. 
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    68
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    69
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    70
    f(1)
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    71
    f(2)
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    72
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    73
Yes, it returned 1 and 2 respectively. 
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    74
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    75
Now, let us see what we did. The first line ``def f(x)`` is used to
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    76
define the name and the parameters to the function. ``def`` is a
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    77
keyword and ``f`` is the name of the function and ``x`` the parameter
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    78
of the function.  
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    79
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    80
The second line is the body of the function. Incidentally, this
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    81
function has a single line definition. Note that the body of the
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    82
function is indented, just like any other code block, in Python.
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    83
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    84
{{{ switch to next slide, problem statement 1 }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    85
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    86
%% 1 %% Write a python function named cube which computes the cube of
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    87
   a given number n.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    88
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    89
Pause here and try to solve the problem yourself.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    90
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    91
{{{ switch to next slide, solution }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    92
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    93
The problem can be solved as,
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    94
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    95
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    96
    def cube(n):
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    97
    	return n**3
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
    98
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
    99
Now let us see how to write functions without arguments.
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   100
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   101
{{{ switch to next slide, greet function }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   102
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
   103
Let us define a new function called ``greet`` which will print ``Hello
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   104
World``.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   105
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   106
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   107
    def greet():
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   108
    	print "Hello World!"
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   109
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
   110
Now try calling the function,
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   111
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   112
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   113
    greet()
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   114
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   115
Well that is a function which takes no arguments. Also note that it is
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   116
not mandatory for a function to return values. The function ``greet``
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   117
neither takes any argument nor returns any value.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   118
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   119
Now let us see how to write functions with more than one argument.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   120
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   121
{{{ switch to next slide, exercise 2 }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   122
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   123
%% 2 %% Write a python function named ``avg`` which computes the
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   124
   average of ``a`` and ``b``.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   125
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   126
Pause here and try to solve the problem yourself.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   127
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   128
{{{ switch to next slide, solution 2 }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   129
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
   130
The problem can be solved as shown,
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   131
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   132
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   133
    def avg(a,b):
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   134
    	return (a + b)/2
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   135
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   136
Thus if we want a function to accept more arguments, we just list them
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   137
separated with a comma between the parenthesis after the function name
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   138
in the ``def`` line.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   139
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   140
{{{ switch to next slide, docstring }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   141
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   142
It is always a good practice to document the code that we write, and
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   143
for a function we define we should write an abstract of what the
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
   144
function does, and that is called a doc-string. Let us modify the
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
   145
function ``avg`` and add doc-string to it. Do the following,
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   146
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   147
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   148
    def avg(a,b):
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   149
        """ avg takes two numbers as input (a & b), and
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   150
	returns the average of a and b"""
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   151
	return (a+b)/2
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   152
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
   153
Note that doc-strings are entered in the immediate line after the
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   154
function definition and put as a triple quoted string. And here as far
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   155
as the code functionality is concerned, we didn't do anything. We just
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   156
added an abstract of what the function does.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   157
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   158
Now try this in the ipython interpreter.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   159
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   160
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   161
    avg?
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   162
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   163
It displays the docstring as we gave it. Thus docstring is a good way
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   164
of documenting the function we write.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   165
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   166
Try to do this,
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   167
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   168
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   169
    f?
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   170
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   171
It doesn't have a docstring associated with it. Also we cannot infer
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   172
anything from the function name, and thus we are forced to read the
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   173
code to understand anything about the function.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   174
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   175
{{{ switch to next slide, exercise 3 }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   176
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   177
%% 3 %% Add docstring to the function f.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   178
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   179
Pause here and try to do it yourself.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   180
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   181
{{{ switch to next slide, solution }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   182
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   183
We need to define the function again to add docstring to the function
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   184
``f`` and we do it as,
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   185
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   186
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   187
    def f(x):
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   188
    	"""Accepts a number x as argument and,
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   189
	returns the square of the number x."""
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   190
	return x*x
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   191
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   192
{{{ switch to next slide, exercise 4 }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   193
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   194
%% 4 %% Write a python function named ``circle`` which returns the
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   195
   area and perimeter of a circle given radius ``r``.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   196
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   197
Pause here and try to solve the problem yourself.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   198
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   199
{{{ switch to next slide, solution 4 }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   200
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   201
The problem requires us to return two values instead of one which we
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   202
were doing till now. We can solve the problem as,
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   203
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   204
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   205
    def circle(r):
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   206
    	"""returns area and perimeter of a circle given radius r"""
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   207
	pi = 3.14
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   208
	area = pi * r * r
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   209
	perimeter = 2 * pi * r
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   210
	return area, perimeter
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   211
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   212
A python function can return any number of values. There is no
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   213
restriction for it.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   214
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   215
Let us call the function ``circle`` as,
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   216
::
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   217
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   218
    a, p = circle(6)
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   219
    print a
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   220
    print p
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   221
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   222
Now we have done enough coding, let us do some code reading exercise,
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   223
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   224
{{{ switch to next slide, what }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   225
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   226
What does the function ``what`` do?
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   227
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   228
.. def what( n ):
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   229
..     if n < 0: n = -n
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   230
..     while n > 0:
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   231
..         if n % 2 == 1:
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   232
..             return False
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   233
..         n /= 10
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   234
..     return True
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   235
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   236
Pause here and try to figure out what the function ``what`` does.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   237
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   238
{{{ switch to next slide, even_digits }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   239
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   240
.. def even_digits( n ):
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   241
..    """returns True if all the digits of number n is even
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   242
..    returns False if all the digits of number n is not even"""
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   243
..     if n < 0: n = -n
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   244
..     while n > 0:
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   245
..         if n % 2 == 1:
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   246
..             return False
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   247
..         n /= 10
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   248
..     return True
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   249
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   250
The function returns ``True`` if all the digits of the number ``n``
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   251
are even, otherwise it returns ``False``.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   252
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   253
Now one more code reading exercise,
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   254
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   255
{{{ switch to next slide, what }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   256
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   257
What does the function ``what`` do?
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   258
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   259
.. def what( n ):
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   260
..     i = 1
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   261
..     while i * i < n:
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   262
..         i += 1
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   263
..     return i * i == n, i
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   264
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   265
Pause here and try to figure out what the function ``what`` does.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   266
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   267
{{{ switch to next slide, is_perfect_square }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   268
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   269
.. def is_perfect_square( n ):
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   270
..     """returns True and square root of n, if n is a perfect square,
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   271
..     otherwise returns False and the square root of the 
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   272
..     next perfect square"""
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   273
..     i = 1
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   274
..     while i * i < n:
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   275
..         i += 1
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   276
..     return i * i == n, i
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   277
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   278
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   279
The function returns ``True`` and the square root of ``n`` if n is a
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   280
perfect square, otherwise it returns ``False`` and the square root of
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   281
the next perfect square.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   282
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   283
This brings us to the end of this tutorial, in this tutorial we covered
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   284
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   285
{{{ switch to next slide, summary }}}
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   286
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   287
- Functions in Python
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   288
- Passing parameters to a function
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   289
- Returning values from a function
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   290
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   291
We also did few code reading exercises.
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   292
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
   293
{{{ Show the "sponsored by FOSSEE" slide }}}
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   294
463
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
   295
This tutorial was created as a part of FOSSEE project, NME ICT, MHRD India
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
   296
192559461dcb Reviewed getting started with functions.
Puneeth Chaganti <punchagan@fossee.in>
parents: 444
diff changeset
   297
Hope you have enjoyed and found it useful.
444
1aa91f8d8d59 added script getting started with functions.
Anoop Jacob Thomas<anoop@fossee.in>
parents:
diff changeset
   298
Thank you!