Python:简单的赋值问题

为什么
x = (y = z + 1)非法?

x = y = z + 1为什么合法呢?
两者有什么区别?
谢谢

在 Python 中,x = (y = z + 1) 是非法的语法,因为 Python 不支持嵌套的赋值表达式。这是因为 Python 将赋值语句视为一个语句而不是一个表达式,因此不能将其作为其他表达式的一部分来使用。

相反,x = y = z + 1 是一个合法的语法,它可以被解释为两个连续的赋值语句:首先将 z + 1 的结果赋值给 y,然后将 y 的值赋值给 x。这种写法在 Python 中是很常见的,用于同时赋值多个变量。

需要注意的是,尽管 x = y = z + 1 是一个合法的语法,但它并不等价于 x = (y = z + 1)。在后者中,赋值语句的返回值是被赋的值(也就是 z + 1),因此 x 的值也会被设置为 z + 1。而在前者中,y 和 z + 1 先进行赋值运算,得到的是一个布尔值,然后将这个布尔值再次赋值给 x,这显然是不正确的。因此,如果想要同时对多个变量赋值,应该使用 x = y = z + 1 这种形式。

如果是c语言,这样嵌套就是允许的
因为c语言中赋值语句也是一个表达式,它有返回值
而python中赋值语句没有返回值,不可以作为右值

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    答案:

    x = (y = z + 1) 在Python中是非法的语法,这是因为Python不支持在一个赋值语句中嵌套另一个赋值语句。

    而 x = y = z + 1 是合法的赋值语法,这里简单解释下实际执行的过程:

    z + 1 的结果会被赋值给 y (即 y = z + 1) 然后 y 的值又会被赋值给 x (即 x = y)

    这两种方式在赋值结果上是相同的,但是第二种方式会更加简洁和易读。因此,建议在Python编程中采用第二种方式。

    以下是相关代码演示:

    第一种方式,非法的语法

    x = (y = z + 1) # 报语法错误

    第二种方式,合法的语法

    y = z + 1 x = y


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^