Python language: Functions
The FOSSEE Group
Department of Aerospace Engineering
IIT Bombay
Mumbai, India
FOSSEE Team (IIT Bombay) Functions 1 / 32
Functions
Outline
1 Functions
Default & Keyword Arguments
Variable Scope
Examples
FOSSEE Team (IIT Bombay) Functions 2 / 32
Functions
Functions for abstraction
Reduce duplication of code
Fewer lines of code: lesser scope for bugs
Re-usability of code
Use functions written by others, without exactly
knowing how they do, what they are doing
Enter Functions!
FOSSEE Team (IIT Bombay) Functions 3 / 32
Functions
Defining functions
Consider the function f(x) = x^2
In Python:
In []: def f(x):
.....: return x*x
.....:
In []: f(1)
In []: f(1+2j)
def is a keyword
f is the name of the function
x the parameter of the function
return is a keyword
FOSSEE Team (IIT Bombay) Functions 4 / 32
Functions
Defining functions . . .
In []: def greet():
.....: print("Hello World!")
.....:
In []: greet()
greet is a function that takes no arguments
It returns nothing explicitly
Implicitly, Python returns None
None is also a built-in, immutable data type
FOSSEE Team (IIT Bombay) Functions 5 / 32
Functions
Defining functions . . .
In []: def avg(a, b):
.....: return (a + b)/2
.....:
In []: avg(12, 10)
avg takes two arguments
Returns one value
FOSSEE Team (IIT Bombay) Functions 6 / 32
Functions
Doc-strings
It’s highly recommended that all functions have
documentation
We write a doc-string along with the function
definition
def avg(a, b):
"""Returns the average of two
given numbers."""
return (a + b)/2
In[]: avg?
In[]: greet?
FOSSEE Team (IIT Bombay) Functions 7 / 32
Functions
Returning multiple values
Return area and perimeter of circle, given radius
Function needs to return two values
def circle(r):
"""Returns area and perimeter of
circle given radius r"""
pi = 3.14
area = pi * r * r
perimeter = 2 * pi * r
return area, perimeter
In []: circle(4)
In []: a, p = circle(6)
FOSSEE Team (IIT Bombay) Functions 8 / 32
Functions Default & Keyword Arguments
Outline
1 Functions
Default & Keyword Arguments
Variable Scope
Examples
FOSSEE Team (IIT Bombay) Functions 9 / 32
Functions Default & Keyword Arguments
Default arguments
In []: round(2.484)
In []: round(2.484, 2)
In []: s.split() # split on spaces
In []: s.split(’;’) # split on ’;’
In []: range(10)
In []: range(1, 10)
In []: range(1, 10, 2)
FOSSEE Team (IIT Bombay) Functions 10 / 32
Functions Default & Keyword Arguments
Default arguments . . .
In []: def welcome(greet, name="World"):
.....: print(greet, name)
.....:
In []: welcome("Hi", "Guido")
In []: welcome("Hello")
FOSSEE Team (IIT Bombay) Functions 11 / 32
Functions Default & Keyword Arguments
Default arguments . . .
Arguments with default values, should be placed at
the end
The following definition is WRONG
In []: def welcome(name="World", greet):
.....: print(greet, name)
.....:
FOSSEE Team (IIT Bombay) Functions 12 / 32
Keyword Arguments
In []: def welcome(greet, name="World"):
.....: print(greet, name)
.....:
In []: welcome("Hello", "James")
In []: welcome("Hi", name="Guido")
In []: welcome(name="Guido",greet="Hey")
In []: welcome(name="Guido", "Hey")
Cannot have non-keyword args after kwargs
Functions Default & Keyword Arguments
Built-in functions
Variety of built-in functions are available
abs, any, all, len, max, min
pow, range, sum, type
Refer here: http://docs.python.org/
library/functions.html
FOSSEE Team (IIT Bombay) Functions 14 / 32
Functions Variable Scope
Outline
1 Functions
Default & Keyword Arguments
Variable Scope
Examples
FOSSEE Team (IIT Bombay) Functions 15 / 32
Functions Variable Scope
Arguments are local
In []: def change(q):
.....: q = 10
.....: print(q)
.....:
In []: change(1)
In []: print(q)
FOSSEE Team (IIT Bombay) Functions 16 / 32
Functions Variable Scope
Variables inside function are local
In []: n = 5
In []: def change():
.....: n = 10
.....: print(n)
.....:
In []: change()
In []: print(n)
FOSSEE Team (IIT Bombay) Functions 17 / 32
Functions Variable Scope
If not defined, look in parent scope
In []: n = 5
In []: def scope():
.....: print(n)
.....:
In []: scope()
Note that n was not defined in scope
It looked for the variable in previous scope
See: pythontutor.com
FOSSEE Team (IIT Bombay) Functions 18 / 32
Functions Variable Scope
global
Use the global statement to assign to global
variables
In[]: def change():
....: global n
....: n = 10
....: print(n)
....:
In[]: change()
In[]: print(n)
FOSSEE Team (IIT Bombay) Functions 19 / 32
Functions Variable Scope
Mutable variables
Behavior is different when assigning to a list
element/slice
Python looks up for the name, from innermost
scope outwards, until the name is found
In []: name = [’Mr.’, ’Steve’,’Gosling’]
In []: def change_name():
.....: name[0] = ’Dr.’
.....:
In []: change_name()
In []: print(name)
FOSSEE Team (IIT Bombay) Functions 20 / 32
Functions Variable Scope
Passing Arguments . . .
In []: n = 5
In []: def change(n):
.....: n = 10
.....: print(n, "inside change")
.....:
In []: change(n)
In []: print(n)
FOSSEE Team (IIT Bombay) Functions 21 / 32
Functions Variable Scope
Passing Arguments . . .
In []: name = [’Mr.’, ’Steve’,’Gosling’]
In []: def change_name(x):
.....: x[0] = ’Dr.’
.....: print(x, ’in change’)
.....:
In []: change_name(name)
In []: print(name)
FOSSEE Team (IIT Bombay) Functions 22 / 32
Functions Variable Scope
Passing Arguments . . .
In []: name = [’Mr.’, ’Steve’,’Gosling’]
In []: def change_name(x):
.....: x = [1,2,3]
.....: print(x, ’in change’)
.....:
In []: change_name(name)
In []: print(name)
FOSSEE Team (IIT Bombay) Functions 23 / 32
Functions Variable Scope
Passing Arguments . . .
In []: name = [’Mr.’, ’Steve’,’Gosling’]
In []: def change_name(x):
.....: x[:] = [1,2,3]
.....: print(x, ’in change’)
.....:
In []: change_name(name)
In []: print(name)
FOSSEE Team (IIT Bombay) Functions 24 / 32
Functions Examples
Outline
1 Functions
Default & Keyword Arguments
Variable Scope
Examples
FOSSEE Team (IIT Bombay) Functions 25 / 32
Functions Examples
Functions: example
def signum( r ):
"""returns 0 if r is zero
-1 if r is negative
+1 if r is positive"""
if r < 0:
return -1
elif r > 0:
return 1
else:
return 0
Note docstrings
FOSSEE Team (IIT Bombay) Functions 26 / 32
Functions Examples
What does this function do?
def what(n):
if n < 0: n = -n
while n > 0:
if n % 2 == 1:
return False
n /= 10
return True
FOSSEE Team (IIT Bombay) Functions 27 / 32
Functions Examples
What does this function do?
def what(n):
i = 1
while i * i < n:
i += 1
return i * i == n, i
FOSSEE Team (IIT Bombay) Functions 28 / 32
Functions Examples
What does this function do?
def what(x, n):
if n < 0:
n = -n
x = 1.0 / x
z = 1.0
while n > 0:
if n % 2 == 1:
z *= x
x *= x
n //= 2
return z
FOSSEE Team (IIT Bombay) Functions 29 / 32
Functions Examples
Nested functions
def f(x):
def g(x):
return x+1
return g(x)**2
FOSSEE Team (IIT Bombay) Functions 30 / 32
Functions Examples
Nested functions: returning functions
def f():
def g(x):
return x+1
return g
In []: func = f()
In []: func(1)
In []: f()(1) # Also valid!
FOSSEE Team (IIT Bombay) Functions 31 / 32
Functions Examples
Summary
Defining functions
Taking either 0, or more arguments
Returning None implicitly or any number of values
Default and keyword arguments
Variable scope, global
Mutable and immutable arguments
Nested functions
FOSSEE Team (IIT Bombay) Functions 32 / 32