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

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

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

newtup = 3, + (2,4)

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
89
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Это вопрос приоритета. 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'> 

Какова твоя цель? Что ты пытаешься сделать

Herc01 29.09.2018 02:08

Я не понимаю, почему он был отклонен. +1 от меня.

Tushar 29.09.2018 02:17

Вторая строка не добавляет int к кортежу.

PM 2Ring 29.09.2018 02:40

@ PM2Ring, который вы пытаетесь добавить в кортеж.

Herc01 29.09.2018 14:29

Я не пытаюсь ничего добавить. Я не размещал код на этой странице. См. Объяснение в ответе user2357112. Во второй строке OP + - это оператор унарный плюс, а не оператор сложения, который принимает два операнда.

PM 2Ring 29.09.2018 14:47
Ответ принят как подходящий

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

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

В вашем коде:

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

Это 2 отдельных кортежа (3,) и (2,4), так что это работает.

newtup = 3, + (2, 4)

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

Другие вопросы по теме