2013-12-13 2 views
0

유감스러운 제목에 대해 유감스럽게도 한 줄로 설명하기가 어렵다.파이썬이 튜플에서 함수를 제거하는 것

글쎄,이 코드가 있고, 그 안에 함수를 실행합니다. 이 기능을 실행 한 후 난과 같이 튜플가 나타납니다

(Position(15,20),425) 

지금 내가 3 개 바르 원하는 -이 숫자를 얻기 위해 X, Y, Z를. 시도 :

작동하지 않습니다. 내가 다른 접근 방식에서 그것을 시도 , 는 여전히 그것을 얻을, 난이 오류가 나던 :

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] (http://stackoverflow.com/users/2555451/icodez) 대답의 경우 두 항목은 튜플'(a, b)'와 숫자'c'입니다. 튜플'(a, b)'는 함수 호출의 결과 인 튜플의 첫 번째 요소에서 값을 가져옵니다 (다행히도 튜플입니다). 숫자'c'는 튜플의 두 번째 요소에서 값을 가져옵니다. –

0

당신의 위치는 (15 ~ 20)을 반환 반복 가능해야한다, 당신은 당신 Position에 대한 가정을하지 않고뿐만 아니라

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 * can * be;)이 스 니펫은 이것을 임의의 클래스에 대해 구현하는 방법을 보여줍니다 – alko

0

압축을 해제 할 수 있습니다 아래

는 데모입니다 할 수 있음 :

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

x, y = pos 

Position의 특성에 따라 다릅니다. 다른 답변이 제안하는 것처럼 그것이 명명 된 튜플 인 경우이 방법이 효과적입니다. 점차적으로 파이썬 코드는 Namedtuples을 사용하여 이와 같은 값을 반환합니다. 설명서에 사용 된 예제는 Point(x,y)입니다.

관련 문제