为啥在具有相同变量的语句中使用多个等号?

Posted

技术标签:

【中文标题】为啥在具有相同变量的语句中使用多个等号?【英文标题】:Why use more than one equal sign in a statement with the same variable?为什么在具有相同变量的语句中使用多个等号? 【发布时间】:2018-04-17 10:58:55 【问题描述】:

我遇到了使用具有相同变量的语句的示例代码:

event_type=event_type=str(payload_json['event'])

我试过了:

a=b=c=d=10

所有四个变量(a、b、c 和 d)都变成 10。像:

a=10
b=10
c=10
d=10

这是一个亚马逊代码示例,所以我怀疑我对 Python 的理解,而不是代码示例。该页面可以在这里找到: AWS Kinesis example

这里可能发生什么?一些我不理解的 Python 巫术或只是一个错字?

【问题讨论】:

您似乎已经回答了自己。是的,这是为多个变量分配相同的值。 @Fan_of_Martijn_Pieters:你错过了这个问题。实际问题是关于a=a=value 形式的代码,其中被分配的对象是重复的。 OP 讨论 a=b=c=d=value 只是为了探索复合赋值语句的作用。 我认为a=a=ba=b 没有什么不同。这对我来说似乎是个错误。 a = a = 10 这样的东西在我看来是复制和粘贴的产物,它在语义上等同于预期的a = 10,并且比预期的a = 10 更少冗余。 @Fan_of_Martijn_Pieters:具体代码的含义是一个明确的问题。我认为投票结束,因为你的不清楚,但这个问题没有什么不清楚的地方。 【参考方案1】:

a = a = b总是等同于 python 中的a = b。正如您所描述的那样使用带有多个等号的语句称为chained assignment,并且在许多编程语言中都受支持。某些语言在检测到相同变量 (C) 的链式赋值时会引发错误,但其他语言会简单地忽略它(python、javascript)。

改变这种行为是个坏主意,而且不容易实现,因为赋值运算符的行为是内置在 python 中的,没有提供修改钩子(参见:Is it possible to overload Python assignment?)。因此,我认为可以安全地假设这是您发现的(无害的)错字。

【讨论】:

我建议您删除或限定这些在许多其他语言中是等效的评论。例如,在 C 中,a = bb 的值分配给a(根据需要和适当的转换),但a = a = b 具有未定义的行为(因为在序列点之间修改对象两次是非法的)。 感谢@EricPostpischil。我已更新该段落以使其更准确。

以上是关于为啥在具有相同变量的语句中使用多个等号?的主要内容,如果未能解决你的问题,请参考以下文章

具有多个连接的 mysqli Prepared 语句不断返回 false [关闭]

为啥在 JavaScript 的 IF 语句中允许重新声明变量

c语言中连续3个if语句 三种情况,大于等于小于0,为啥只执行第一个if就不执行下面的了?请问

条件循环及其它语句

c语言中连续3个if语句 三种情况,大于等于小于0,为啥只执行第一个if就不执行下面的了?请问

Lua中的语句