“使用”和“重新绑定”变量之间的含义和区别是啥?

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使用 var1var2。我们使用var1,因为我们在调用print 时使用了它的值。我们使用了var2,因为我们改变了它所引用的对象。请注意,我们没有更改var2 所引用的对象,我们使用 已经存在的对象并对其进行了修改。另请注意,我们从未尝试将 new 值分配给任一变量。

重新绑定变量

当您重新绑定变量时,您正在更改变量名称所引用的对象。下面是另一个例子来帮助说明这一点:

>>> var1 = 1
>>> 
>>> def func():
    global var1
    var1 = 2


>>> func()
>>> var1
2
>>>

在上面的例子中。我们在func 内重新绑定varvar1 用于引用对象1,但由于我们将var1 重新绑定到2,它现在引用对象2

那么有什么区别呢?

不同之处在于,当我们使用变量时,我们只是使用变量已经引用的对象。当我们重新绑定一个变量时,我们改变了该变量所引用的对象。

【讨论】:

以上是关于“使用”和“重新绑定”变量之间的含义和区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

变异、重新绑定、复制值和赋值运算符之间的区别

单片机C语言设计里说的可重入函数是啥?和不可重入函数的区别是啥?

接口实现中静态变量的含义是啥?

C语言中“指针”和“指针变量”的区别是啥??

Java的概念和定义是啥?

ref、val 和 out 对方法参数的含义是啥?