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之间的正整数按偶数递增,技术递减的顺序输出?