Python整数自增运算 ++

997

每当回忆起我使用 VB6 的时候,总会心里暗笑,“现代语言中哪个不允许用双加号进行自增操作呢?”

number++

令我惊讶的是,在Python文档中我没有找到任何相关内容。难道我真的要使用number = number + 1这种方式吗?人们不会使用++ / --这种符号吗?


10
个人而言,我很高兴我们不必忍受诸如 a[i] = i++; 这样的代码,在C++中求值顺序是未定义的。 - Tim Pietzcker
5
您的问题按给定顺序的答案是:“Erlang、Python、Lua等”(指创建C语言之后的“现代”意义);“不是”;以及“不一定”。 - tzot
79
不同意你们的看法:i++ 写起来更短,读起来也更简单。读得越少,大脑就能更专注于整个大局。 - Robino
10
更好的解决方案是明确定义计算顺序,可能是从左到右,而不是删除一个有用的运算符。至于原帖的作者:Python几乎不能算现代语言...实际上是一种相当糟糕的语言,尽管被广泛使用。 - Yakov Galka
6
@uoɥʇʎPʎzɐɹC 两者都不是特别复杂也不难看。第一个更容易理解。 - Robino
显示剩余10条评论
7个回答

1731

Python不支持++,但您可以这样做:

number += 1

121
我认为@Thomas的解释更适用于这里;我认为问题更多是关于“为什么”,而不是“是什么”。 - rickcnagy
1
同意@rickcnagy的观点,更像是“如何做?”(如果您真的不关心代码的简洁性,您也可以简单地执行number = number + 1),解释为什么Python中不存在++和--似乎更有用。 - alezvic
7
不完全正确。以下代码并不能按预期运行:progress = 0; print(progress += 1)。因此,+= 看起来并不能完全替代 C++ 的 ++ 操作符。 - Dr_Zaszuś
Python中有很多?=,其中?被替换为另一个运算符,尽管它不能与每个运算符一起使用。例如n = 2变成n = n \ 2,然而n +== 1不会展开为n = n += 1。 - alan2here

535

简单来说,在Python中不存在++--操作符,因为它们不会是操作符,它们必须是语句。 在Python中的所有命名空间修改都是语句,以保持简单和一致性。 这是设计决策之一。由于整数是不可变的,因此“更改”变量的唯一方法是通过重新分配它。

幸运的是,我们在其他语言中有很棒的工具可以处理++--的用例,例如enumerate()itertools.count()


24
enumerate()itertools.count() 的有用参考资料。 - tato
2
有没有什么优雅的替代方案可以取代这个:reserved_index = 0; col_names = [name if name != '_' else 'reserved' + (reserved_index++) for name in column_names]?我传递了一个列名列表,其中一些不感兴趣的列名只是 '_'。我需要构建一个临时表,将那些 '_' 替换为唯一但无意义的名称。使用就地后增运算符会使此操作变得容易;我正在努力想出其他不涉及显式循环数组的方法。 - Tom
6
@Tom reserved_indices = itertools.count(); col_names = [name if name != '_' else 'reserved' + str(next(reserved_indices)) for name in column_names]这段代码的作用是对列名进行处理。如果列名为下划线,则将其替换为 "reserved" 加上一个数字,以保证列名的唯一性。其中,itertools.count() 是 Python 的一个库函数,可用于生成无限递增的整数序列。 - Artyer
5
这个决定违反了规则-不出人意料。++number在大多数语言中都适用。- 这可能会引起多少错误。语言应该也要方便开发者使用。 - jeffery.yuan
2
@jeffery.yuan 我学Python还不到一年(我的编程经验超过几十年),但是,天啊,这种事情的数量...让人难以置信。最低公共分母赢了。 - msouth
显示剩余3条评论

65
你可以这样做:
number += 1

38

是的,在Python中没有++运算符。Guido不喜欢这些运算符。


2
它让编写UI代码的行数少得多了。除了使用Python将您的行数缩短到C++的15%之外,呵呵。 - Darren Ringer
--Guido...... - Andrew

26

在类似C的语言中,++主要用于追踪索引。在Python中,您以抽象的方式处理数据,很少通过索引进行递增等操作。在精神上最接近++的东西是迭代器的next方法。


3
有时候我发现你确实只需要迭代索引,例如,如果你想要跟踪一个函数在收敛之前运行了多少次等。尽管这可能仍然被视为“很少使用”,但 Python 在大多数情况下非常适合科学编码。 - jrh

12
请查看 Python中增量和减量运算符的行为 来了解为什么此方法无法实现。
Python实际上没有 ++ 和 -- 运算符,我个人从未觉得这是一个损失。我更喜欢具有清晰名称的函数,而不是具有不总是清晰语义的操作符(因此,经典的面试问题++x vs. x++和重载它的困难)。我也从未真正支持后缀增量对可读性所产生的影响。
您可以始终定义一些包装器类(如累加器),具有明确的增量语义,然后执行诸如x.increment()或x.incrementAndReturnPrev()的操作。

9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接