Writing Functions

We've already been using functions, but how do you write them on your own?

In Python we do this using the following structure:

def function_name(inputs):
    commands
    return output_value

  • def tells Python that we're creating a function
  • function_name is how we refer to the function in our program
  • the commands control what the function does with the inputs
  • return tells Python what output to send back to the rest of the program.

Then indentation is important because it tells Python what is inside the function. You end a function by stopping the indenting.

For example, if we wanted to write a function that converts pounds to kilograms:

In [1]:
def convert_kg_to_g(weight_kg):
    weight_g = weight_kg * 1000
    return weight_g

We can then call that function exactly like we would one of Python's built in functions:

In [2]:
convert_kg_to_g(2.2)
Out[2]:
2200.0

Functions can have multiple inputs

Let's say we've fit a linear regression to some data and want to get a prediction based on the fitted parameters.

In [3]:
def predicted_value(a, b, x):
    prediction = a + b * x
    return prediction

predicted_value(2, 1, 1)
Out[3]:
3

Define Functions Create Instructions

  • Defining a function creates a set of instructions, but doesn't do anything with them
  • Like describing to a friend how to make a PB&J sandwhich
  • When you call the function the computer follows those instructions and creates a value
  • If you want to do something with that value you need to store it in a variable
  • Functions need to be defined before they are called.

Local Variables

Variables created inside a Python function only exist inside that function.

In [4]:
def convert_kg_to_g(weight_kg):
    weight_g = weight_kg * 1000
    return weight_g
result = convert_kg_to_g(3.9)
print weight_g
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-e642eed7c18d> in <module>()
      3     return weight_g
      4 result = convert_kg_to_g(3.9)
----> 5 print weight_g

NameError: name 'weight_g' is not defined

You should also treat functions as if they don't know about variables outside of them, so they should only work with things that you pass them as input.