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]:

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]:

- 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.

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
```

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.