В 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
Предложение распространяется также на асинхронные выражения.
В данный момент предложение находится на стадии черновика.
