为了账号安全,请及时绑定邮箱和手机立即绑定

Python中增量和递减运算符的行为

Python中增量和递减运算符的行为

浮云间 2019-07-04 10:44:37
Python中增量和递减运算符的行为我注意到可以对变量应用预增量/递减运算符(如++count)。它编译,但实际上并不改变变量的值!Python中的预增量/递减运算符(+/-)的行为是什么?为什么Python会偏离在C/C+中看到的这些操作符的行为?
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

++不是操作员。是两个+操作员。这个+运算符是同一性接线员,什么都不做。(澄清:+-一元运算符只对数字起作用,但我想你不会期望一个假设的++)操作符处理字符串。)

++count

解析为

+(+count)

翻译成

count

你得用稍微长一点的+=操作员来做您想做的事情:

count += 1

我怀疑++--运算符由于一致性和简单性而被排除在外。我不知道Guido van Rossum给这个决定提供了确切的论据,但我可以想象一些论点:

  • 更简单的解析。从技术上讲,解析

    ++count

    是模棱两可的,因为它可能是

    ++count

    (两元一元)

    +

    (操作人员)-尽可能容易

    ++count

    (一元)

    ++

    (操作员)这不是一个显着的句法歧义,但它确实存在。
  • 更简单的语言。

    ++

    只不过是同义词

    += 1

    ..这是一个速记发明,因为C编译器愚蠢,不知道如何优化

    a += 1

    进入

    inc

    大多数计算机都有指令。在优化编译器和字节码解释语言的今天,将运算符添加到允许程序员优化代码的语言中通常会遭到反对,特别是在Python这样的语言中,这种语言的设计是一致的和可读的。
  • 令人困惑的副作用。语言中的一个常见错误

    ++

    运算符混淆了前后增量/递减运算符之间的差异(在优先级和返回值上),Python喜欢消除语言“gocha”-s。这个

    优先问题

    C的前后增量

    毛茸茸的,而且很容易搞砸。


查看完整回答
反对 回复 2019-07-04
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

当您想要增加或减少时,通常要在整数上这样做。就像这样:

b++

但在Python中,整数是不变..那就是你不能改变他们。这是因为整数对象可以在几个名称下使用。试试这个:

>>> b = 5>>> a = 5>>> id(a)162334512>>> id(b)162334512>>> a is bTrue

上面的A和b实际上是同一个对象。如果你增加a,你也会增加b,这不是你想要的。所以你得重新分配。就像这样:

b = b + 1

或更简单:

b += 1

重新分配bb+1..这不是增量运算符,因为它不增量。b重新分配。

简而言之:Python在这里的行为有所不同,因为它不是C,也不是机器代码的低级包装器,而是一种高级动态语言,在这种语言中,增量没有意义,而且也没有C中的那样必要,例如,每次有循环时都使用它们。


查看完整回答
反对 回复 2019-07-04
?
慕慕森

TA贡献1856条经验 获得超17个赞

而其他的答案都是正确的,因为它们显示出+通常是这样的(也就是说,保留这个数字,如果它是一个),他们是不完整的,因为他们无法解释发生了什么。

准确地说,+x评估为x.__pos__()++xx.__pos__().__pos__().

我可以想象出一个非常奇怪的班级结构(孩子们,不要在家里这么做!)就像这样:

class ValueKeeper(object):
    def __init__(self, value): self.value = value    def __str__(self): return str(self.value)class A(ValueKeeper):
    def __pos__(self):
        print 'called A.__pos__'
        return B(self.value - 3)class B(ValueKeeper):
    def __pos__(self):
        print 'called B.__pos__'
        return A(self.value + 19)x = A(430)print x, type(x)print +x, type(+x)print ++x, type(++x)print +++x, type(+++x)


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 1124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信