【问题标题】:Python integer incrementing with ++ [duplicate]Python整数用++递增[重复]
【发布时间】: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 两者都不是特别复杂,也不是丑陋的。第一个比较容易理解。

标签: python syntax increment


【解决方案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的强大实现。

      【讨论】:

        猜你喜欢
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-24
        • 1970-01-01
        • 1970-01-01
        • 2011-01-01
        相关资源
        最近更新 更多