很抱歉将我之前的问题加倍,但我想问一下可以解决问题的具体数据。我想要这个结果
tuple_of_vars = (item for _, item for zip(tuple_of_vars, new_vals_generator))
因为这是不可能的
a, b, c, d = (val for val in infite_generator)
实际上然后我想在单行中做
for var in var_list:
var = next(infinite_generator)
是否有任何解释器挂钩可以获取分配左侧变量数量的元信息?更好的是,我可以自动完成最后一段代码(包括左侧的情况,即具有可变索引和步骤的切片)
还有没有办法制作变量的生成器,这些变量将在赋值的左侧。
编辑:这不会在 Python3 中停止:
def incr(a):
while True:
yield a
a += 1
a = [None for i in range(20)]
a[3:3:3], *_ = incr(1)
print(a)
与:
a,b,c,d, *_ = incr(1)
print(a, b, c, d)
即使它没有切片(实际上索引是变量,这只是测试)。我知道 islice 等,但它太慢了。
这也会产生错误:
a = 1000*[True]
bound = int(len(a) ** 0.5)
for i in range(3, bound, 2):
a[3::i], *x = [[False] for _ in range(bound)]
""" Error:
ValueError: attempt to assign sequence of size 1 to extended slice of size 333
"""
还有这个:
a = 1000*[True]
bound = int(len(a) ** 0.5)
for i in range(3, bound, 2):
a[3::i], *x = [False] * bound
""" Error:
TypeError: must assign iterable to extended slice
"""