#292·500lines

Python 解释器帧作用域创建错误?

作者: timmwagener创建于 2021年9月11日更新于 2021年9月11日

因为我正在阅读《(令人满意的)》这本书,所以我在Python 解释器章节中遇到了一个部分,我有点难以理解其逻辑。具体来说,这是关于make_frame()的内容,它位于Virtualmachine中,在这行中。考虑到在Function.__call__中调用的位置 vm.make_frame(...),似乎会将帧的局部作用域重置为全局作用域。这样是否会导致函数修改其局部作用域时出现问题?这是一种优化还是一个错误?(我假定后者,因为主 byterun 仓库中的逻辑在此处发生了变化)_

python
# Function
def __call__(self, *args, **kwargs):
        callargs = inspect.getcallargs(self._func, *args, **kwargs)
        frame = self._vm.make_frame(
            self.func_code, callargs, self.func_globals, {}
        )

# VirtualMachine
def make_frame(self, code, callargs={}, global_names=None, local_names=None):
        if global_names is not None and local_names is not None:
            local_names = global_names
...

内容来源: aosabook/500lines