为什么在较低范围内使用变量会更改在较高范围内解析变量的方式?

问题描述

我有一个返回其参数的琐碎函数,该值是使用cpython的LOAD_FAST指令获得的。

def function1(n):
    return n  # LOAD_FAST for n -- what I expect

dis.dis(function1)
  2           0 LOAD_FAST                0 (n)
              2 RETURN_VALUE

但是,在函数主体中添加lambda表达式会导致使用LOAD_DEREF获得该值。

def function2(n):
    return n  # LOAD_DEREF for n -- this is surprising
    lambda: n  # LOAD_DEREF for n -- what I expect

dis.dis(function2)
  2           0 LOAD_DEREF               0 (n)
              2 RETURN_VALUE

disassembly of <code object <lambda> at 0x...,file "...",line 3>:
  3           0 LOAD_DEREF               0 (n)
              2 RETURN_VALUE

为什么n的查找会根据是否在较低(相关)范围中使用n而在较高范围中发生变化?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)