Skip to main content
 首页 » 编程设计

python之如何在 python 中将名称与多个对象或值绑定(bind)

2025年05月04日13kevingrace

我在一本关于语言描述的书中看到

On the other hand, a name can be bound to no object (a dangling pointer),  
one object (the usual case), or several objects (a parameter name in a  
 recursive function). 

我们如何将一个名称绑定(bind)到多个对象?这不是我们所说的数组吗,例如,其中所有元素都具有相同的名称但具有索引?对于此处示例的递归函数:

x = 0 
def f(y): 
    global x 
    x += 1 
    if x < 4 : 
        y +=100 
        f(y) 
 
    else: return 
f(100) 

名称 y 是否与递归创建的多个值绑定(bind),因为 nametable 已经将 y 名称绑定(bind)到正在递归复制的初始值?

已编辑 只需按此处 Visualizer看看它产生了什么。 :)

请您参考如下方法:

没有。 名称绑定(bind)到一个对象。当我们谈论 Python 时 - 它要么绑定(bind)到给定上下文中的单个对象,要么根本不存在。

发生的情况是内部工作可能在多个“层”中定义了名称 - 但您的代码只会看到其中一个。

如果一个名字是递归函数中的一个变量,你只会看到在当前运行的上下文中绑定(bind)到它的任何东西 - 每次在 Python 中有一个函数调用,执行框架,它是一个包含多个对象的对象运行代码的属性,包括对局部变量的引用,被卡住。在被调用的函数上,一个新的执行框架被创建,在那里,变量名再次绑定(bind)到它们在被调用上下文中的任何新值。您的代码只是“看到”这个实例。

然后,Python 中存在全局变量和内置对象的问题:如果名称在函数执行上下文中不是局部变量,则会在模块的全局变量中搜索它(同样,只有其中一个会可见)。并且,如果名称在全局变量中不存在,则 Python 在 globals().__builtins__ 中查找它,这是您最后一次调用。