我想用不同的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
答案 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'])