foo*_*cue 17 python lighttable
最近我对以下伪造的python代码的第2行发生了什么感到好奇:
def my_fun(foo,bar):
foo
return foo + bar
Run Code Online (Sandbox Code Playgroud)
我之所以感兴趣的原因是我正在尝试使用Light Table并尝试将手表放在"foo"上.它似乎导致python解释器挂起.
我是否认为这条线完全没有效果并且不会导致任何错误?有人可以解释一下翻译在这里做了什么吗?
Nig*_*nel 27
在内置的dis模块的帮助下,可以看看发生了什么:
import dis
def my_fun(foo,bar):
foo
return foo + bar
dis.dis(my_fun)
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
前两个字节码正是我们所需要的:foo
线路.
这是这些字节码的作用:
基本上,foo
行没有效果.(好吧,如果foo
没有定义变量那么LOAD_FAST
就会抛出NameError
)
什么都没发生.它等同于无意义的操作查看dis
输出
In [3]: dis.dis(my_fun)
2 0 LOAD_FAST 0 (foo)
3 POP_TOP
3 4 LOAD_FAST 0 (foo)
7 LOAD_FAST 1 (bar)
10 BINARY_ADD
11 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
我们可以看到它快速加载,foo
然后对它没有任何作用.
归档时间: |
|
查看次数: |
748 次 |
最近记录: |