Я пытаюсь объединить два кортежа с помощью перегруженного оператора + в Python 3.6. У меня не возникнет проблемы, если я включу круглые скобки, как в первом примере, но если я опущу круглые скобки, как во втором примере, я получаю сообщение об ошибке. Я получаю сообщение «неверный тип операнда для унарного +: 'кортеж'». Кто-нибудь может объяснить, что происходит?
newtup = (3,) + (2,4)
newtup = 3, + (2,4)






Это вопрос приоритета. 3, + (2, 4) анализируется как кортеж с элементами 3 и +(2, 4), а не как добавление 3, и (2, 4). Вам нужны круглые скобки.
Он пытается разобрать вторую строку как
(3, + (2,4))
Затем он видит, что вы использовали унарный +, как в a = +5, с кортежем. Это запрещено, поэтому вы получите сообщение об ошибке. Запятым дается очень широкий приоритет (т. Е. Они занимают как можно больше символов, ближе к +, чем к *). Причина в том, что (biglongexpression1, biglongexpression2) никогда не следует смешивать два biglongexpression. Все остальное более важно и должно оцениваться перед запятой, и поэтому +(2,4) оценивается перед запятой - потому что это biglongexpression.
Как вы это делаете:
3, + (2,4)
Он в основном упрощается до двух частей 3, и +(2,4), вторая недействительна, поэтому вы можете попробовать новую распаковку в python 3:
(3,*(2,4))
Если на python2 просто используйте второй пример.
Простой; В первой строке вы создаете новый кортеж, состоящий из двух кортежей. Во второй строке вы добавляете 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'>
Я не понимаю, почему он был отклонен. +1 от меня.
Вторая строка не добавляет int к кортежу.
@ PM2Ring, который вы пытаетесь добавить в кортеж.
Я не пытаюсь ничего добавить. Я не размещал код на этой странице. См. Объяснение в ответе user2357112. Во второй строке OP + - это оператор унарный плюс, а не оператор сложения, который принимает два операнда.
Унарный оператор + ожидает допустимого операнда (int, float и т. д.) С правой стороны.
В вашем коде 3, + (2, 4) вы предоставляете кортеж (2, 4) в качестве операнда для +, который не является допустимым операндом и, следовательно, является ошибкой.
В вашем коде:
newtup = (3,) + (2, 4)
Это 2 отдельных кортежа (3,) и (2,4), так что это работает.
newtup = 3, + (2, 4)
Здесь один кортеж с двумя элементами 3 и +(2, 4), который не работает по вышеупомянутой причине.
Какова твоя цель? Что ты пытаешься сделать