“使用”和“重新绑定”变量之间的含义和区别是啥?
Posted
技术标签:
【中文标题】“使用”和“重新绑定”变量之间的含义和区别是啥?【英文标题】:What are the meanings and differences between "uses" and "rebinds" a variable?“使用”和“重新绑定”变量之间的含义和区别是什么? 【发布时间】:2018-01-05 03:58:40 【问题描述】:简而言之,来自 Python:
避开全球
如果函数体只使用全局变量,则不要使用全局变量 变量(包括改变绑定到该变量的对象 变量,当对象是可变的)。
仅在以下情况下使用全局语句 函数体重新绑定全局变量(通常通过分配给变量的名称)。
“使用”和“重新绑定”变量的含义和区别是什么?
“改变绑定到变量的对象”是“使用”还是“重新绑定”变量?为什么?
【问题讨论】:
当您在函数中使用变量时,您只是在使用变量的值或改变变量引用的对象。当您重新绑定一个变量时,您正在重新绑定实际的变量名称以引用不同的对象。 谢谢。 “访问”变量与“使用”变量的含义相同吗? “引用”一个变量怎么样? 是的,确实如此。我会在一秒钟内发布一个答案来详细说明我上面的评论。 “引用”变量是否与获取变量引用的对象相同? “变异”变量引用的对象和设置变量引用的对象是一样的意思吗? 是的。确实如此。在这种情况下,这两个术语的含义相同。 【参考方案1】:“Mutate”和“bind”/“rebind”是两个互斥的操作。变异改变对象,而绑定改变名称。
这是绑定:
a = []
这是变异:
a.append(None)
“使用”表示访问绑定到名称的现有对象,无论是用于读取还是用于变异。
【讨论】:
【参考方案2】:使用变量
当您使用变量时,您正在使用变量的实际值 - 它所引用的对象 - 或改变变量名称所引用的对象。这是一个例子:
>>> var1 = 1
>>> var2 = [1]
>>>
>>> def func():
print(var1)
var2.append(2)
>>> func()
1
>>> var2
[1, 2]
>>>
在上面的示例中,我们在func
中使用 var1
和var2
。我们使用var1
,因为我们在调用print
时使用了它的值。我们使用了var2
,因为我们改变了它所引用的对象。请注意,我们没有更改var2
所引用的对象,我们使用 已经存在的对象并对其进行了修改。另请注意,我们从未尝试将 new 值分配给任一变量。
重新绑定变量
当您重新绑定变量时,您正在更改变量名称所引用的对象。下面是另一个例子来帮助说明这一点:
>>> var1 = 1
>>>
>>> def func():
global var1
var1 = 2
>>> func()
>>> var1
2
>>>
在上面的例子中。我们在func
内重新绑定var
。 var1
用于引用对象1
,但由于我们将var1
重新绑定到2
,它现在引用对象2
。
那么有什么区别呢?
不同之处在于,当我们使用变量时,我们只是使用变量已经引用的对象。当我们重新绑定一个变量时,我们改变了该变量所引用的对象。
【讨论】:
以上是关于“使用”和“重新绑定”变量之间的含义和区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章