Обычно я предлагаю оценивая скорость эмпирически с timeit
, но это показалось мне чем-то, что действительно эквивалентно.
Конечно же, dis
узла подтверждает это:
Вот x = 1, 2
6 0 LOAD_CONST 3 ((1, 2))
3 STORE_FAST 2 (x)
6 LOAD_CONST 0 (None)
9 RETURN_VALUE
и x = (1, 2)
:
9 0 LOAD_CONST 3 ((1, 2))
3 STORE_FAST 2 (x)
6 LOAD_CONST 0 (None)
9 RETURN_VALUE
Только в случае люди были интересны, если как-то сходство было только представить в tuple
s, состоящий из литералов, я также сделал x = a, b
:
12 0 LOAD_FAST 0 (a)
3 LOAD_FAST 1 (b)
6 BUILD_TUPLE 2
9 STORE_FAST 2 (x)
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
и x = (a, b)
:
15 0 LOAD_FAST 0 (a)
3 LOAD_FAST 1 (b)
6 BUILD_TUPLE 2
9 STORE_FAST 2 (x)
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
Как было указано в the source article, Fine Manual Пайтона охватывает тему дополнительных скобок:
Как вы видите, на выходные кортежи всегда заключенную в круглые скобки, так что вложенные кортежи интерпретируются правильно; они могут вводиться с круглыми скобками или без них, хотя в любом случае часто требуются скобки (если кортеж является частью большего выражения).
Давайте увеличим, почему именно они «часто ... необходимы в любом случае» - это вопрос приоритета оператора. Точно так же, как обычная письменная арифметика имеет порядок операций, так и языки программирования, такие как Python. Это помогает нам отличить 12 + 1/2
от (12 + 1)/2
. Поэтому в этом случае нам часто нужны скобки вокруг tuple
элементов, которые более сложны, чем простые name или literal. Поэтому в этих примерах мы можем видеть два разных способа интерпретации выражений, которые используют кортежи. Поскольку приоритет запятых ниже, чем оператор умножения (и их ассоциативность одна и та же), умножение происходит сначала, когда нет круглых скобок, чтобы обеспечить более явное упорядочение.
>>> 12 * 4, 5
(48, 5)
>>> 12 * (4, 5)
(4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5)
сноска относительно скобок и кортежей, а также из The Fine Manual:
Исключением является пустой кортеж, для которых требуются круглые скобки - не допуская в скобки, «ничего» в выражениях приведет к неоднозначности и позволяют общее опечатки, чтобы пройти uncaught.
Ресурс: https://gist.github.com/androm3da/8a646fbe817d576b1f0d