В PEP 798 предлагается расширить возможности коллекций (списки, словари, множества) и генераторов, разрешив операции распаковки (*
и **
) внутри выражения.
Способ позволит лаконично в одну строку объединять произвольное количество итерируемых объектов в одну коллекцию:
[*it for it in its] # список с объединением итерируемых элементов в 'its'
{*it for it in its} # множество с объединением итерируемых элементов в 'its'
{**d for d in dicts} # словарь с комбинацией словарей в 'dicts'
(*it for it in its) # генератор с объединением итерируемых элементов в 'its'
В данный момент объединение списков мы осуществляем с помощью циклов:
# с помощью генератора
its = [[1, 2], [3, 4], [5]]
new_list = [x for it in its for x in it]
# с помощью метода extend
new_list = []
for it in its:
new_list.extend(it)
# для множеств и словарей с помощью метода update
new_set = set()
for it in its:
new_set.update(it)
new_dict = {}
for d in dicts:
new_dict.update(d)
# также возможно использовать генераторную функцию (yield)
def new_generator():
for it in its:
yield from it
Предложение распространяется также на асинхронные выражения.
В данный момент предложение находится на стадии черновика.