Интересно, что ответ не тот же для списков и кортежей (то есть работает на Python 3.8 на моей машине c - в зависимости от того, где выполняется ваш код и какая версия Python используется, ваш пробег может отличаться):
from timeit import timeit
percents = range(100+1)
def construct_tuple():
tuple(percents)
def unpack_into_tuple():
return *percents,
def construct_list():
list(percents)
def unpack_into_list():
return [*percents]
print(timeit(construct_tuple, number=1000000))
print(timeit(unpack_into_tuple, number=1000000))
print(timeit(construct_list, number=1000000))
print(timeit(unpack_into_list, number=1000000))
Результаты:
0.48456099999999996
0.5760516999999999
0.4818578
0.3919844000000001
Это остается таким же для больших итераций.
Теперь, почему распаковка быстрее для списков, но медленнее для кортежей, я не могу вам сказать. Возможно, это связано с тем, как понимание списка работает со своим параметром по сравнению с пониманием кортежа. Поразительно, что обе функции-конструкторы очень сопоставимы, в то время как понимание unpack_into_tuple()
намного медленнее, чем понимание unpack_into_list()
. Ваш вопрос был "рекомендуемый и быстрый". Я бы сказал, что все они быстрые, поэтому рекомендуемый вариант действительно должен быть наиболее читаемым и поддерживаемым в вашем коде.
Если это ключевая часть вашего кода, которая выполняется миллионы раз, вы можете заботиться о скорости, но вы должны задаться вопросом, является ли Python лучшим выбором. Вероятно, вам лучше выбрать вариант, который наиболее понятен для других и для себя в будущем.