【问题标题】:Why use more than one equal sign in a statement with the same variable?为什么在具有相同变量的语句中使用多个等号?
【发布时间】:2023-07-27 06:45:01
【问题描述】:

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

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:具体代码的含义是一个明确的问题。我认为投票结束,因为你的不清楚,但这个问题没有什么不清楚的地方。

标签: python


【解决方案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。我已更新该段落以使其更准确。