Python整数用++递增[重复]

Posted

技术标签:

【中文标题】Python整数用++递增[重复]【英文标题】:Python integer incrementing with ++ [duplicate] 【发布时间】:2011-02-07 15:04:21 【问题描述】:

当我回顾我的 VB6 时代并想“什么现代语言不允许使用双加号递增?”时,我总是自嘲:

number++

令我惊讶的是,我在 Python 文档中找不到任何关于此的内容。我真的必须服从number = number + 1吗?人们不使用++ / -- 表示法吗?

【问题讨论】:

我很高兴我们不必忍受像 a[i] = i++; 这样的 C++ 中的评估顺序未定义的事情。 按给定顺序回答您的问题:“Erlang、Python、Lua 等”(用于创建 C 之后的“现代”含义); “不”;和“不一定”。 不同意你们的观点:i++ 写的少,读的少。少读意味着大脑可以更多地关注全局。 @TimPietzcker:更好的解决方案是很好地定义评估顺序,可能从左到右,而不是放弃一个有用的运算符。对 OP 来说:Python 几乎不是一种现代语言......实际上是一种相当糟糕的语言,尽管被广泛使用。 @uoɥʇʎPʎzɐɹC 两者都不是特别复杂,也不是丑陋的。第一个比较容易理解。 【参考方案1】:

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

number += 1

【讨论】:

我认为@Thomas 的解释在这里更有用;我认为问题更多是why 而不是what 同意@rickcnagy,更像是“怎么做?” (如果你真的不关心代码的简洁性,你也可以简单地做 number = number + 1)为什么 ++ 和 -- 在 Python 中不存在的推理似乎更有用。 不完全是。以下将无法按预期工作:progress = 0; print(progress += 1)。所以+= 似乎并没有完全取代C++ 的++ 运算符。 Python 有很多 ?= where ?被另一个运算符替换,尽管它不会与每个运算符一起使用。例如 n \= 2 变成 n = n \ 2,但是 n +== 1 不会解包为 n = n += 1【参考方案2】:

简单地说,++-- 运算符在 Python 中不存在,因为它们不是运算符,它们必须是语句。为了简单和一致性,Python 中的所有命名空间修改都是一个语句。这是设计决策之一。而且因为整数是不可变的,所以“改变”变量的唯一方法是重新分配它。

幸运的是,我们为 ++-- 在其他语言中的用例提供了出色的工具,例如 enumerate()itertools.count()

【讨论】:

enumerate()itertools.count()的有用参考 想建议一个优雅的替代品:reserved_index = 0; col_names = [name if name != '_' else 'reserved' + (reserved_index++) for name in column_names]?我收到了一个列名列表,其中一些不感兴趣的只是'_'。我需要构建一个临时表,将那些 '_'s 替换为唯一但无意义的名称。就地后增量运算符将使这变得容易;我正在努力想出不涉及显式循环数组的其他方法。 @Tom reserved_indices = itertools.count(); col_names = [name if name != '_' else 'reserved' + str(next(reserved_indices)) for name in column_names] 这个决定违反了规则——不足为奇。 ++number 适用于大多数语言。 - 这可能会导致多少错误。该语言也应该对开发人员友好) @jeffery.yuan 还不到一年(意思是 python——我已经编码了几十年),但是,伙计,这样的事情的数量......令人难以置信头脑。最小公分母赢了。【参考方案3】:

你可以这样做:

number += 1

【讨论】:

【参考方案4】:

是的。 ++ 运算符在 Python 中不可用。 Guido 不喜欢这些运算符。

【讨论】:

它使得编写 UI 代码的行数减少了很多。除了使用 Python 将你的行数减少到 C++ 中的 15% 之外,呵呵。【参考方案5】:

++ 在类 C 语言中派上用场的主要原因是跟踪索引。在 Python 中,您以抽象的方式处理数据,很少通过索引等增加。与++ 最接近的精神是迭代器的next 方法。

【讨论】:

有时我发现你真的只需要迭代索引,例如,如果你想跟踪一个函数在收敛之前运行了多少次,等等。虽然这可能仍然算作“很少使用”, Python 非常适合大部分科学编码,FWIW。【参考方案6】:

查看Behaviour of increment and decrement operators in Python 了解为什么这不起作用。

Python 并没有真正的 ++ 和 --,而且我个人从未觉得这是一种损失。

我更喜欢名称清晰的函数而不是语义不总是清晰的运算符(因此经典的面试问题是关于 ++x 与 x++ 以及重载它的困难)。我也从来不是后增量对可读性所做的事情的忠实粉丝。

您总是可以定义一些具有明确增量语义的包装类(如累加器),然后执行 x.increment() 或 x.incrementAndReturnPrev() 之类的操作

【讨论】:

【参考方案7】:

这里有一个解释: http://bytes.com/topic/python/answers/444733-why-there-no-post-pre-increment-operator-python

然而,python 哲学中缺少此运算符可提高一致性并避免隐含性。

另外,这种增量在python代码中并没有广泛使用,因为python有迭代器模式加上函数enumerate的强大实现。

【讨论】:

以上是关于Python整数用++递增[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python给定一个整数n,将1到n之间的正整数按偶数递增,技术递减的顺序输出?

python常见面试题讲解提取不重复的整数

python常见面试题讲解提取不重复的整数

python 一个二维数组和一个整数,判断数组中是否含有该整数

数组键的规则

Python基础(输出五行五角星,数量每行递增/输出九九乘法表)