There are a lot of explanations online for distinguishing those two concepts. As in the answers of this question says,
- Expressions only contain identifiers, literals and operators, where operators include arithmetic and boolean operators, the function call operator
()the subscription operator
and similar, and can be reduced to some kind of “value”, which can be any Python object.
- Statements (see 1, 2), on the other hand, are everything that can make up a line (or several lines) of Python code. Note that expressions are statements as well.
It is quite confusing to me actually. So I find the simplest way to distinguish those two is that expressions are just a part of statements. An expression represents some operation, but it cannot be executed solely by the compiler.