Use dis to print the bytecode for a small function and explain what each group of instructions does.
Taking a function apart and showing its instructions is the fastest way to prove that Python compiles before it interprets. The dis module prints the instructions of a code object, and it groups them by the line of source code that produced them.
import dis
def average(values):
total = sum(values)
return total / len(values)
dis.dis(average)
The output falls into four groups. The first group is the start of the function. That is RESUME, which in version 3.11 and later marks the beginning of a frame, and then a LOAD_FAST for each parameter and local name. The second group is the call to the built-in sum. It uses LOAD_GLOBAL to find the name, then LOAD_METHOD or PRECALL and CALL to make the call, and then STORE_FAST to keep the result in total. The third group is the arithmetic, with a fresh LOAD_FAST for total and for len, a BINARY_OP for the division, and then RETURN_VALUE to hand the result back to the caller.
Two details make the answer sharper. The bytecode belongs to the CPython implementation and it changes between versions, so it is not a portable contract in the way that Java's class file format is. And every line of source maps to a group of instructions, which means the dis output reads like your source code with the order of evaluation written out in full.
For an interview this is a strong demonstration, because it connects the general claim that Python compiles to bytecode with something you can actually show. If you would rather look at the same information without the instruction listing, you can read the attributes of the code object directly. co_names holds the global names that the function uses, co_consts holds the literal values, and co_varnames holds the names of the local variables.