import dis, sys
def return_value_used():
frame = sys._getframe(2)
code = frame.f_code.co_code[frame.f_lasti:]
try:
has_arg = ord(code[0]) >= dis.HAVE_ARGUMENT
next_code = code[3 if has_arg else 1]
except IndexError:
return True
return ord(next_code) != dis.opmap['POP_TOP']
def foo():
if return_value_used():
return 42
print 'doom'
foo()
print foo()
--This outputs:
doom
42
Well that's... unholy.
(I'm also quite late to this party; Youtube video of the talk or the pdf)