Enums allow you to set options using code and allow for consistent use of options in code. Let's say you have a function that takes a type param.

```
def doMath(mathType, num1, num2):
if mathType == 1:
return num1 * num2
elif mathType == 2:
return num2 / num2
```

For the code above, the user can specify the type, but there are a few problems. The first problem is that if the user passes in the type, they could type the value incorrectly. For example, `doMath(3, 1, 2)`

.

Also, notice that the function call doesn't really describe what is going to happen. We don't know that 3 is not an acceptable value, and why is the value 1 multiple and 2 divide?

We can solve these problems and more with Enums. In this lesson, we will look at the Python enum module.

We begin by fixing the function above with enums.

```
## Start by importing the Enum base class
from enum import Enum
## Create a new class to extend the Base
## class and create some Enums
class MathOperations(Enum):
MULTIPLY = 1
DIVIDE = 2
## Replace the arbitrary numbers with enums
def doMath(mathType, num1, num2):
if mathType == MathOperations.MULITPLY:
return num1 * num2
elif mathType == MathOperations.DIVIDE:
return num2 / num2
## Call the function using the new enums
doMath(MathOperations.MULITPLY, 1, 2)
```

Note, that is it no required to have all uppercase names for your enum, i.e. `MULTIPLY`

, but this is a common convention.

That's the main concept. There are many more features with the enum module, so be sure to check out the official docs: https://docs.python.org/3/library/enum.html.