如果在python中单独写一个变量名会发生什么?

2024-03-27

最近我开始好奇以下伪 python 代码的第 2 行发生了什么:

def my_fun(foo,bar):
    foo
    return foo + bar

我开始感兴趣的原因是我正在尝试 Light Table 并尝试在“foo”上放置一个手表。它似乎导致 python 解释器挂起。

我是否正确地认为这条线完全没有影响并且不会导致任何错误?有人可以解释一下口译员在这里到底做了什么吗?


通过内置的一点帮助,人们可以查看正在发生的事情dis http://docs.python.org/2/library/dis.html module:

import dis

def my_fun(foo,bar):
    foo
    return foo + bar

dis.dis(my_fun)

The dis.disfunction 反汇编函数(是的,它可以反汇编自身)、方法和类。

的输出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

前两个字节码正是我们所需要的:foo line.

这些字节码的作用如下:

  1. 第一个推送对局部变量的引用foo到堆栈上 (加载_快速 http://docs.python.org/2/library/dis.html#opcode-LOAD_FAST)
  2. 第二个删除堆栈顶部(POP_TOP http://docs.python.org/2/library/dis.html#opcode-POP_TOP)

基本上,foo线没有影响。 (好吧,如果foo那么变量没有定义LOAD_FAST会抛出NameError)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果在python中单独写一个变量名会发生什么? 的相关文章

随机推荐