# 19.1: Return Values

- Page ID
- 15383

Some of the built-in functions we have used, such as the math functions, produce results. Calling the function generates a value, which we usually assign to a variable or use as part of an expression.

e = math.exp(1.0) height = radius * math.sin(radians)

All of the functions we have written so far are void; they print something or move turtles around, but their return value is `None`

.

In this chapter, we are (finally) going to write fruitful functions. The first example is `area`

, which returns the area of a circle with the given radius:

def area(radius): temp = math.pi * radius**2 return temp

We have seen the `return`

statement before, but in a fruitful function the `return`

statement includes an expression. This statement means: “Return immediately from this function and use the following expression as a return value.” The expression can be arbitrarily complicated, so we could have written this function more concisely:

def area(radius): return math.pi * radius**2

On the other hand, **temporary variables** like `temp`

often make debugging easier.

Sometimes it is useful to have multiple return statements, one in each branch of a conditional:

def absolute_value(x): if x < 0: return -x else: return x

Since these `return`

statements are in an alternative conditional, only one will be executed.

As soon as a return statement executes, the function terminates without executing any subsequent statements. Code that appears after a `return`

statement, or any other place the flow of execution can never reach, is called **dead code**.

In a fruitful function, it is a good idea to ensure that every possible path through the program hits a `return`

statement. For example:

def absolute_value(x): if x < 0: return -x if x > 0: return x

This function is incorrect because if `x`

happens to be 0, neither condition is true, and the function ends without hitting a `return`

statement. If the flow of execution gets to the end of a function, the return value is `None`

, which is not the absolute value of 0.

>>> print absolute_value(0) None

By the way, Python provides a built-in function called `abs`

that computes absolute values.

Exercise \(\PageIndex{1}\)

*Write a *`compare`

* function that returns *`1`

* if *`x > y`

*, *`0`

* if *`x == y`

*, and *`-1`

* if *`x < y`

*.*