2013-12-13 3 views
0

Извините за паршивое название, его трудно объяснить в одной строке.Python, удаляющий функцию из своего кортежа

ну, у меня есть этот код, и я запускаю в нем функцию. после запуска этой функции я получаю кортеж так:

(Position(15,20),425) 

теперь я хочу 3 ВАРА - X, Y, Z, чтобы получить эти цифры. я попробовал:

x,y,z = val 

он не работает. я пытался к ней из другого подхода, еще не получает его, я получаю эту ошибку:

ValueError : need more than 2 values to unpack 

так я понял, что мне нужно, чтобы сломать эту позицию вне. Я понятия не имею, как это сделать ...

Может кто-нибудь мне помочь? спасибо

+3

Что такое позиция? – alko

ответ

3

(предполагая, что Position(15,20) истребим и содержит ровно два элемента) Вам просто нужно поставить круглые скобки вокруг первых двух переменных.

Ниже демонстрация:

>>> tup = ((1,2),3) 
>>> (x,y),z = tup 
>>> x 
1 
>>> y 
2 
>>> z 
3 
>>> 
+0

Я предполагаю, что его позиция - это особый экземпляр класса – alko

+0

Так просто, но так полезно !!! Большое спасибо, я спас меня! –

+0

Полезнее понимать. Поскольку вы назначаете из кортежа из двух предметов, вам необходимо назначить два элемента. В случае ответа [iCodez's] (http://stackoverflow.com/users/2555451/icodez) два элемента - это кортеж '(a, b)' и номер 'c'. Кортеж '(a, b)' принимает свои значения из первого элемента вашего кортежа, который является результатом вызова вашей функции (к счастью, также кортежа). Число 'c' берет свое значение из второго элемента вашего кортежа. –

0

Вы Положение должно быть итерацию, возвращение (15, 20), то вы можете его распаковать, а

class Position (object): 
    def __init__(self, x, y): self.x, self.y = x, y 
    def __iter__(self): return iter((self.x, self.y)) 

(x, y), z = (Position(15,20),245) 
# equals x = 15; y = 20; z = 245 
+0

Еще лучше, 'Position' должно быть' namedtuple'. – 9000

+0

@ 9000 * может * быть;) этот фрагмент показывает, как это можно реализовать для произвольного класса – alko

0

без внесения каких-либо предположений о Position вас можно сделать:

pos, z = (Position(15,20),245) 

ли вы можете сделать

x, y = pos 

зависит от характера Position. Как показывают другие ответы, если это именованный кортеж, это работает. Все чаще код Python использует Namedtuples для возврата значений, подобных этому. Пример, используемый в документации, относится к Point(x,y).

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