2016-07-01 6 views
3

평가 된 함수에서 특정 요소에 접근하는 아주 쉬운 방법이 있어야한다고 생각합니다. 내가 달성하기 위해 노력하고있는 무슨의 아주 간단한 예를 들어 내가 x의 값을 정의함수에서 객체 및 튜플에 액세스하기

def func(x): 
    a = 2*x 
    b = x*x 
    return 1, 10, 100, (a,b) 

이며, 기능은 가치와 튜플의 집합을 반환합니다. 내가 (예를 들어) 첫 번째 요소와 튜플을 검색하고 싶습니다.

과 같은 코드
hello, cello = func(2)[[0,3]] 

오류를 반환합니다. 그러나 이러한 요소는 개별적으로 액세스 할 수 있습니다 (예 :

bello = func(2)[3] 

).

내가 사용하고있는 함수는 평가하는 데 시간이 걸리므로 두 번 실행하는 것이 바람직한 옵션은 아닙니다. 또한, 가능한 경우 튜플의 각 요소에 대해 많은 수의 변수를 생성하고 싶지는 않습니다. 내가의 라인을 따라하는 솔루션 싶습니다 본질적으로

:

hello, cello = func(2)[[0,3]] 

,

hello = 1 
cello = (4,4) 

감사를

+3

'hello, _, _, cello = func (2)' – AChampion

+0

당신이 요구하는 것을 정말로 이해할 수 없습니다. 이것은 함수와 아무런 관련이 없습니다. '[[0,3]]'는 파이썬에서 단순히 잘못된 구문입니다. 함수를 그대로두고'(1, 10, 100, (2, 3)) '튜플을 다루는 경우에는 작동하지 않습니다. –

+0

Numpy 배열은'x [[0,3]]'과 같은 색인 생성은 허용하지만 목록이나 튜플은 색인 생성을 허용하지 않습니다. – hpaulj

답변

3

그래서 당신은 풀고 무시할 수 있습니다 :

hello, _, _, cello = func(2) 

하지만 더 자세하게

from operator import itemgetter 
hello, cello, bello = itemgetter(0, 3, 15)(func(2)) 

또는 :

my_results = itemgetter(0, 3, 15) 
hello, cello, bello = my_results(func(2)) 
+0

'itemgetter'가'* args'을 가질 수 있는지 몰랐습니다. 또한 사전이나 목록/튜플을 사용하여 그렇게 할 수 있습니다. 목록 작성보다 훨씬 빠르다. 파이썬이 추가되기 전에 대부분의 파이썬을 배웠습니다. (그리고'numpy'는 파이썬을 필요로하지 않습니다.) – hpaulj

+0

'itemgetter'를 확인했습니다; 그것은 파이썬 코드입니다. 'itemgetter ([1,2,3]) (foo())'는'obj = foo();와 동일하다. 튜플 ([1,2,3]에서 i에 대해 [obj [i]))'. 잠재적으로는 편리하지만 속도는 향상되지 않습니다. – hpaulj

0

hello, cello = [func(2)[i] for i in [0,3]] 
+0

그러나 이것은'i'의 반복마다'func'을 실행합니다. – hpaulj

+0

'itemgetter'는'func (2)'가 한번만 평가되도록 이것을 다시 작성합니다. – hpaulj

0

시도 표준 솔루션은 사전 사용에 반환을 포장하는 것입니다 전자 결과는 더이 operator.itemgetter을 사용할 수 있습니다 복잡 결과를 분리하는 것. ({.... 고해상도 : ITER, 결과 반복}

르 = FUNC ... 당신이 자신에게 _의 계산과 코드를 저장하는 방법으로

반환 더 읽을 수 .)

그리고

르 [반복]을 사용하여 나중에

.

관련 문제