# Evaluating Expressions

**00:00**
In the previous lesson, I showed you about the `globals`

and `locals`

parameters to `eval()`

. In this lesson, I’m going to show you more details about the kinds of expressions you can use with `eval()`

.

**00:11**
Not surprisingly, Boolean expressions are considered expressions, so `eval()`

can evaluate them. This includes all kinds of operators: value comparisons, less than (`<`

), greater than (`>`

), et cetera; logical comparisons, `and`

, `or`

, and `not`

; membership tests, `in`

and `not in`

; as well as identity, `is`

and `is not`

.

**00:34**
To demonstrate some Boolean expressions, let me create some variables.

**00:43**
As you would expect, the result of Boolean comparisons is a Boolean value. It also supports compounds. And here is identity. An example of membership. So far, this is pretty vanilla.

**01:02**
Let me show you why you might want to be able to do this. Consider the situation where you have a function whose behavior needs to change based on some sort of condition passed in.

**01:13**
You can pass that condition in as a string and then use `eval()`

to evaluate that condition, changing the behavior of the function. Let me show you an example.

**01:34**
Obviously, this is a little contrived. It’s not quite real-world, but you get the idea. The condition is being passed in and you’re changing the behavior of the function based on that condition passed in. Let me show you this in practice.

**01:50**
Passing in `"a > b"`

gives you the subtraction.

**01:58**
`"a < b"`

gives you the addition. And of course, similarly with identity. A lot of the examples I’ve been using so far have to do with math, and this is because this is a very common use of `eval()`

.

**02:14**
It’s like having a little calculator built into Python. Pretty much any arbitrary math expression can be evaluated, as long as you remember to import the `math`

library first.

**02:27**
You’ve seen simple expressions like addition before, or powers, but a lot of the more interesting math functions are inside the `math`

library.

**02:37**
You can’t do an import inside of `eval()`

itself, but `eval()`

is sensitive to things that have been imported before its execution.

**02:47**
So once `math`

has been imported, I can do things like the area of a circle,

**03:03**
or I can get my Pythagoras on.

**03:11**
Brilliant man. A *little* crazy, but brilliant man. Go look him up. He had a thing about beans. It was weird. Anything that is a function in Python is actually considered an expression.

**03:25**
That is where you run into some problems. Thankfully, Lost in Space has been rebooted, and so I’m no longer making an esoteric reference to a 1950s black and white television show. I’m all hip.

**03:38**
The challenge is things like the `getoutput()`

function from `subprocess`

. `getoutput()`

runs something on your machine outside of Python. Here, I’m showing you how to use `eval()`

to do `echo`

in Bash, or launch Firefox, or format your hard drive, or send horrible messages to your friends—any of those things.

**04:02**
This is why you want to be very careful what you pass into `eval()`

and where you got it from. I know I’ve warned you before and I will warn you again because it’s important.

**04:13**
So far, I’ve only been using strings with `eval()`

. You can also use pre-compiled objects. In the next lesson, I’ll demonstrate that.

Become a Member to join the conversation.