【问题标题】:Why is i++++++++i valid in python?为什么 i++++++++i 在 python 中有效?
【发布时间】:2011-02-22 11:00:00
【问题描述】:

我“偶然”遇到了这种奇怪但有效的语法

i=3
print i+++i #outputs 6
print i+++++i #outputs 6
print i+-+i #outputs 0
print i+--+i #outputs 6 

(对于每个负号的偶数:输出6,否则输出0,为什么?)

这有什么用吗?

更新(不要误会……我爱 python): Python的原则之一说 应该有一种——最好只有一种——明显的方法来做到这一点。似乎有无数种方法可以做 i+1

【问题讨论】:

  • 你遇到过吗?在混淆编码竞赛中?
  • @S.Lott - 我在这里要求任何解决方案吗?问为什么这是有效的有那么错吗?而且 btb 我只是不小心在 Python IDLE 中输入了 i++1。那是我尝试这个的时候。对于具有 c++ 背景的人来说,这很奇怪。
  • +1,只是因为我不明白为什么有人会-1。每个问题都必须直接从一些“实际”问题中提取出来吗?
  • @S. Lott:是的,除了这个“奇怪的假设”实际上提出了关于运算符优先级、固定性和组合的好问题。我见过更糟的。
  • @S.Lott 恭喜您鼓励大家提出问题。你在竞选 S.O.内容-Nz 徽章?说真的,我已经知道这种语言十年了,与示例和答案一起提出的问题对我来说比其他一些 cmets 更有趣和有教益,我会毫不犹豫地给它们贴上 OT 的标签。只是我的 2c。

标签: python


【解决方案1】:

由于 Python 没有 C 风格的 ++ 或 -- 运算符,因此可以假设您正在否定或肯定(?)左边的值。

例如你希望i + +5 是什么?

i=3
print i + +(+i) #outputs 6
print i + +(+(+(+i))) #outputs 6
print i + -(+i) #outputs 0
print i + -(-(+i)) #outputs 6 

值得注意的是,从Python Grammar Specification,您会看到以下行:

factor: ('+'|'-'|'~') factor | power

这意味着表达式中的因子可以是前面有+-~ 的因子。 IE。它是递归的,所以如果5 是一个因子(这是因为因子->power->NUMBER),那么-5 是一个因子,--5--------5 也是一个因子。

【讨论】:

    【解决方案2】:

    应该是这样的

    print i + (+ (+i) )
    

    即第一个符号为加法运算符,其余为中缀符号

    +i
    

    和(不幸的是)

    ++i
    

    因此是有效的陈述。

    【讨论】:

    • 我喜欢最后一个。 ++i 是有效的,它只是不做它在其他语言中所做的事情:)
    【解决方案3】:

    加号被认为是最右边的一元运算符i 变量,如 +(-3) = -3 或 +(+(+3))) = 3。就在最左边的符号(加号或减号)被解析为二进制,因此 i+++i = i + (+(+i)),在您的示例中转换为 i + i = 3 + 3 = 6。

    其他表达式遵循相同的原则。

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 2013-03-24
      • 2021-03-29
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 2012-08-25
      相关资源
      最近更新 更多