gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:39 26 4
gpt4 key购买 nike

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

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__ 中查找它,这是您最后一次调用。

关于python - 如何在 python 中将名称与多个对象或值绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12676701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com