【问题标题】:=+ Python operator is syntactically correct=+ Python 运算符在语法上是正确的
【发布时间】:2016-05-15 21:08:52
【问题描述】:

我不小心写了:

total_acc =+ accuracy

代替:

total_acc += accuracy

我在网上搜索并找不到anything。那么发生了什么事,为什么 Python 认为我的意思是我正在输入的内容?

计算机太信任我们了。 :)

【问题讨论】:

  • total_acc =+ accuracytotal_acc = +accuracy
  • 从 2 到 3 没有任何变化。但是(imo)这篇文章有更好的答案。因此,我没有将其标记为欺骗。 (如果有更好的欺骗,那么我没有问题)
  • 因为您可以将任意数量的一元运算符放在一行中,所以total_sec+=-+-+-+-+-+-+-+-+-+-+-+-accuracy 确实可以惹恼您的代码审查员。
  • 这几乎和我的 C++ 代码@tdelaney 中的希腊分号一样邪恶。 :)

标签: python python-2.7 operators language-lawyer increment


【解决方案1】:

如果您有兴趣及早发现此类错误,可以使用静态代码分析。例如flake8:

$ cat test.py
total_acc = 0
accuracy = 10

total_acc =+ accuracy
$ flake8 test.py
test.py:4:12: E225 missing whitespace around operator

在这种情况下,它抱怨+ 后面的多余空间,认为您实际上是指total_acc = +accuracy。这将有助于您更早地发现问题。

仅供参考,pylint 也会明白这一点。

【讨论】:

  • 你的回答真的在这里添加了一些特别的东西,你值得一票²!
【解决方案2】:

这与您要像total_acc = -accuracy 一样,除了正面而不是负面。它基本上与total_acc = accuracy 相同,因为在值之前添加 + 不会改变它。

这被称为 一元运算符,因为只有一个参数(例如:+a)而不是两个(例如:a+b)。

This link 再解释一下。

【讨论】:

    【解决方案3】:

    它认为你在做total_acc = +accuracy,它设置total_acc 等于accuracy+ 在没有其他值的变量之前会导致调用变量的 __pos__ 方法。对于大多数类型,这是 nop,但也有某些类型,例如Decimal 实现了__pos__

    【讨论】:

    • 是的,这是正确的,但是 + 运算符会发生什么?
    • + 在值调用对象的 __pos__() 方法之前,如果它有一个。大多数类型没有这样的方法,所以它是无操作的。 Decimal 是一种使用它的类型; stackoverflow.com/questions/16819023/…
    • @kindall 呵呵,我不知道。很高兴知道,谢谢!我会将其添加到我的答案中。
    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2015-03-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    相关资源
    最近更新 更多