Извините, что удваиваю свой предыдущий вопрос, но я подумал спросить конкретные данные, которые решат проблему. Я хочу этот результат
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
"""