最近,我开始好奇,但是以下伪造的python代码的第2行会发生什么:
def my_fun(foo,bar):
foo
return foo + bar
我变得感兴趣的原因是我正在尝试Light Table,并试图将手表放在“ foo”上。它似乎导致python解释器挂起。
我认为这行绝对没有影响并且不会引起任何错误是正确的吗?有人可以在这里解释翻译的功能吗?
内置的dis模块提供了一些帮助,您可以查看正在发生的情况:
import dis
def my_fun(foo,bar):
foo
return foo + bar
dis.dis(my_fun)
的dis.dis
功能反汇编功能(是的,它可以拆卸本身),方法和类。
输出dis.dis(my_fun)
为:
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
前两个字节码正是我们需要的:foo
行。
这些字节码的作用如下:
基本上,foo
行无效。(好吧,如果foo
未定义变量,LOAD_FAST
则会抛出NameError
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句