2014-11-30 3 views

ответ

3

Обычно я предлагаю оценивая скорость эмпирически с 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

Смежные вопросы