代码之家  ›  专栏  ›  技术社区  ›  SysAdmin

为什么我在python中有效?

  •  16
  • SysAdmin  · 技术社区  · 14 年前

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

    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

    3 回复  |  直到 14 年前
        1
  •  28
  •   dash-tom-bang    14 年前

    由于python没有c-style++或--operators,所以只剩下一个运算符来假设您在否定或肯定(?)左边的值。

    例如,你期望什么 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
    

    这意味着表达式中的因子可以是前面有 + , - ~ . 也就是说,它是递归的,所以如果 5 是一个系数(这是因为系数->功率->数字),然后 -5 是一个因素,也是 --5 --------5 .

        2
  •  5
  •   Spidey    14 年前

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

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

        3
  •  5
  •   UncleZeiv    14 年前

    应该读一下

    print i + (+ (+i) )
    

    也就是说,第一个符号是加法运算符,另一个是中缀符号

    +i
    

    而且(不幸的是)

    ++i
    

    因此是有效的陈述。