为啥在具有相同变量的语句中使用多个等号?
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=b
与a=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 = b
将b
的值分配给a
(根据需要和适当的转换),但a = a = b
具有未定义的行为(因为在序列点之间修改对象两次是非法的)。
感谢@EricPostpischil。我已更新该段落以使其更准确。以上是关于为啥在具有相同变量的语句中使用多个等号?的主要内容,如果未能解决你的问题,请参考以下文章
具有多个连接的 mysqli Prepared 语句不断返回 false [关闭]
为啥在 JavaScript 的 IF 语句中允许重新声明变量
c语言中连续3个if语句 三种情况,大于等于小于0,为啥只执行第一个if就不执行下面的了?请问