【问题标题】:Why is print(x += 1) invalid syntax?为什么 print(x += 1) 语法无效?
【发布时间】:2023-01-06 23:11:39
【问题描述】:

这很好用

x = 0
while True:
    x += 1
    print(x)

而这

x = 0
while True:
    print(x += 1)

没有

我想要一个计数到无穷大或至少到最大数字的程序

【问题讨论】:

  • 因为只有表达式可以作为函数的参数,而赋值(增广或其他)是一个语句。
  • 你可以在这里使用walrus operatorprint(x := x + 1)
  • 赋值运算符不返回赋值结果,那么您希望打印什么?

标签: python python-3.x syntax


【解决方案1】:

语法 print(x += 1) 无效,因为 += 运算符是赋值运算符,而不是比较运算符。

print() 函数期望接收一个值来打印,而不是赋值。

在第一个示例中,您正确地将 x + 1 的值赋给了 x,然后打印了 x 的值。在第二个示例中,您试图打印赋值的结果,这是不允许的。

【讨论】:

    【解决方案2】:

    因为print()的参数需要是一个表达式,而赋值语句不是表达式。

    walrus operator := 正是在 Python 中引入的,以允许您执行此操作,尽管它没有允许您增加某些内容的变体。但你可以说

    x = 0
    while True:
        print(x := x + 1)
    

    不过,这并没有让我觉得这是该运算符的特别好或惯用的用法。

    【讨论】:

      【解决方案3】:

      与许多其他语言不同,其中赋值是一个表达式并计算为指定的值,在 Python 中,赋值是它自己的东西。因此它不能用在表达式中。

      这样做的一个好处是,如果您在 if 语句中忘记了 = (即您打算写 == 但写了 = )您会收到错误消息:

      if a = b:   # this is an assignment not a comparison!
      

      在某些其他语言中,这在语法上是有效的,但不会给您预期的结果,从而导致脱发错误。 (这就是 linters 变得如此重要的原因之一。)

      Python 3.8 添加了赋值运算符 :=,又名海象运算符。它的行为类似于其他语言中的赋值。所以这有效:

      x = 0
      while True:
          print(x := x + 1)
      

      不幸的是(或者幸运的是)没有+:=

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-20
        • 1970-01-01
        • 1970-01-01
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-01
        相关资源
        最近更新 更多