почему я не могу объединить эти два кортежа?

1

Я пытаюсь объединить два кортежа, используя перегруженный + оператор в Python 3.6. У меня нет проблемы, если я включу круглую скобку, как первый пример, но если я опустил скобки, как во втором примере, я получаю сообщение об ошибке. Сообщение, которое я получаю, это "плохой тип операнда для унарного +:" кортеж ". Может ли кто-нибудь объяснить, что происходит?

newtup = (3,) + (2,4)

newtup = 3, + (2,4)

Теги:
tuples

5 ответов

0
Лучший ответ

Унарный оператор + ожидает действительный операнд (int, float и т.д.) С правой стороны.

В коде 3, + (2, 4) вы предоставляете кортеж (2, 4) в качестве операнда + который не является допустимым операндом, а также является ошибкой.

В вашем коде:

newtup = (3,) + (2, 4)

Это 2 отдельных набора (3,) и (2,4), поэтому он работает.

newtup = 3, + (2, 4)

Вот его один кортеж с 2 элементами 3 и +(2, 4) который не удается из-за вышеупомянутой причины.

4

Это вопрос приоритета. 3, + (2, 4) анализируется как кортеж с элементами 3 и +(2, 4), а не как добавление 3, и (2, 4). Вам нужны скобки.

3

Он пытается проанализировать вторую строку как

(3, + (2,4))

Затем, видя, что вы использовали унарный +, как в a = +5, с кортежем. Это недопустимо, и вы получаете ошибку. Запятые имеют очень широкий приоритет (т.е. они потребляют как можно больше символов, ближе к +, чем a *). Причина этого заключается в том, что (biglongexpression1, biglongexpression2) никогда не должно смешивать две biglongexpression. Все остальное более важно и должно быть оценено перед запятой, и, следовательно, +(2,4) оценивается перед запятой - потому что это большая biglongexpression.

0

Как вы это делаете:

3, + (2,4)

Это в основном упрощает до двух частей 3, и +(2,4), второе недопустимо, поэтому вы можете попробовать новую распаковку в python 3:

(3,*(2,4))

Если на python2 просто используйте второй пример.

-1

Просто; На первой строке вы создаете новый кортеж из 2 кортежей. Во второй строке вы добавляете int в кортеж. Проверь это.

 x, y=3, (2,4) # assign  x and y to 3, and (2,4) respectively
 print type(y), type(x)
 <type 'tuple'> <type 'int'> 
  • 0
    Какова ваша цель? Что ты пытаешься сделать
  • 0
    Я не понимаю, почему это было понижено. +1 от меня.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню