Recently I became curious about but what happens in line 2 of the following bogus python code:
def my_fun(foo,bar):
foo
return foo + bar
The reason I became interested is that I'm trying Light Table and tried to put a watch on "foo." It appeared to cause the python interpreter to hang.
Am I correct in thinking that this line has absolutely no effect and does not cause any sort of error? Can someone explain what the interpreter does exactly here?
One can look at what is happening with a little help from the built-in dis module:
import dis
def my_fun(foo,bar):
foo
return foo + bar
dis.dis(my_fun)
The dis.dis
function disassembles functions (yep, it can disassemble itself), methods, and classes.
The output of dis.dis(my_fun)
is:
4 0 LOAD_FAST 0 (foo)
3 POP_TOP
5 4 LOAD_FAST 0 (foo)
7 LOAD_FAST 1 (bar)
10 BINARY_ADD
11 RETURN_VALUE
The first two bytecodes are exactly what we need: the foo
line.
Here's what these bytecodes do:
foo
onto the stack
(LOAD_FAST) Basically, foo
line has no effect. (well, if foo
variable is not defined then LOAD_FAST
will throw the NameError
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With