如何创建可以在Python2中解压缩为N个变量的罢工?

时间:2019-02-28 05:57:05

标签: python

我想用不同的int值定义N个变量(作为状态标记,因此仅要求每个var的值都不同)。 首先,我有:

state_default, state_open, state_close = range(3)

然后过了一段时间,要添加新的状态变量,我将其更改为下面的代码

state_default, state_open, state_close, state_error = range(4)

而且我经常忘记将range(3)更改为range(4),因此会引发有关拆包的异常。

我在python3中知道,可以这样处理:

state_default, state_open, state_close, *placeholder = range(1000)

所以我想知道python2中是否有解决方案在哪里我可以无限次(或多次)解压缩对象

总而言之,我希望它可以通过下面的测试

a,b,c = InfiniteUnpackableObject()  # shouldn't give me unpacking error
a,b,c,d = InfiniteUnpackableObject()  # shouldn't give me unpacking error either

1 个答案:

答案 0 :(得分:0)

>>> it = iter(range(4))
>>> a = next(it)
>>> b = next(it)
>>> c = next(it)
>>> d = list(it)
>>> a
0
>>> b
1
>>> c
2
>>> d
[3]

更一般地,作为生成器:

def unpack_collect(iterable, n):
    """Yields the first n values of an interable, and returns the rest as a list."""
    it = iter(iterable)
    for _ in range(n):
        yield next(it)
    yield list(it)

正在使用:

>>> a, b, c, d = unpack_collect('qwerty', 3))
>>> (a, b, c, d)
('q', 'w', 'e', ['r', 't', 'y'])