@jpp Да, я был неправ, говоря, что это был синтаксический сахар, но редко он будет вести себя заметно иначе, чем если бы он был.
ил кортежи, добавленные в Python3.5:
In [128]: *(x for x in range(5)),
Out[128]: (0, 1, 2, 3, 4)
Тем не менее, когда я пытаюсьreturn
понимание кортежа напрямую я получаю ошибку:
In [133]: def testFunc():
...: return *(x for x in range(5)),
...:
File "<ipython-input-133-e6dd0ba638b7>", line 2
return *(x for x in range(5)),
^
SyntaxError: invalid syntax
Это всего лишь небольшое неудобство, поскольку я могу просто присвоить понимание кортежа переменной и вернуть ее. Однако, если я пытаюсь поместить понимание кортежа в понимание словаря, я получаю ту же ошибку:
In [130]: {idx: *(x for x in range(5)), for idx in range(5)}
File "<ipython-input-130-3e9a3eee879c>", line 1
{idx: *(x for x in range(5)), for idx in range(5)}
^
SyntaxError: invalid syntax
Я чувствую, что это немного больше проблемы, так как в некоторых ситуациях понимание может быть важно для производительности.
У меня нет проблем с использованием словаря и списков в этих ситуациях. В скольких других ситуациях понимание кортежей не сработает, когда это делают другие? Или, возможно, я использую это неправильно?
Это заставляет меня задуматься, какой смысл был, если его использование настолько ограничено или, возможно, я делаю что-то не так? Если я не делаю что-то не так, то какой самый быстрый / самый питонический способ создать кортеж, который достаточно универсален, чтобы его можно было использовать так же, как списки и словари?