【问题标题】:Multiple increment operators on the same line Python同一行 Python 上的多个增量运算符
【发布时间】:2016-04-14 03:10:36
【问题描述】:

是否可以在 Python 中的同一行上执行多个变量增量?

例子:

value1, value2, value3 = 0
value4 = 100
value1, value2, value3 += value4

在我的实际程序中,我有很多不同的变量,但必须在某一时刻添加一个变量。

我目前正在做的事情是我想用它来代替:

value1 += value4
value2 += value4
value3 += value4
...
value25 += value4

【问题讨论】:

  • 你为什么不使用 list 或者 dict 呢?
  • value1, value2, value3 = (v + value4 for v in (value1, value2, value3))...

标签: python increment


【解决方案1】:

您可以通过当前命名空间的字典来更新变量(例如vars()):

>>> value1 = value2 = value3 = 0
>>> value4 = 100
>>> for varname in ("value1", "value2", "value3"):
...     vars()[varname] += value4
... 
>>> value1, value2, value3
(100, 100, 100)

【讨论】:

    【解决方案2】:

    元组和生成器解包在这里很有用:

    value1, value2, value3 = 0, 0, 0
    value4 = 100
    value1, value2, value3 = (value4 + x for x in (value1, value2, value3))
    

    【讨论】:

    • @MikeMüller,这不是元组解包,而是生成器表达式的可迭代解包。
    • @MikeGraham 感谢您的指点。我的措辞并不完全正确。最后一行没有创建元组。固定的。我使用 tuple unpacking 来进行更一般的 iterable unpacking
    【解决方案3】:

    有一个简单的方法是创建一个列表并循环它:

    value1, value2, value3 = 0
    value4 = 100
    valuelist = [value1, value2, value3]
    for x in valuelist:
        x += value4
    

    【讨论】:

    • 那行不通——整数是不可变的,+= 重新绑定名称,而不是改变值
    • @MikeGraham 那么什么是可变的?也许将 value1-3 转换为列表中的这些可变值可能会起作用。
    • 解决方案只是不要尝试在这里使用突变,而是创建和分配新值。 stackoverflow.com/a/34694027/192839 是一个非常合理的解决方案
    【解决方案4】:

    您可以为其创建特殊功能:

    def inc(value, *args):
        for i in args:
            yield i+value
    

    并使用它:

    value1 = value2 = value3 = 0
    value4 = 100
    value1, value2, value3 = inc(value4, value1, value2, value3)
    

    【讨论】:

    • 这是一种有趣的方式,但打字时间仍然很长。
    猜你喜欢
    • 2014-08-11
    • 2017-07-13
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2020-07-14
    • 2021-05-08
    • 2013-02-16
    相关资源
    最近更新 更多