2012-05-29 5 views
24

으로는 here, 당신은 파이썬 3 있지만, (함수처럼) 변수의 알 수없는 수를 풀기 위해 별을 사용할 수 있습니다 언급 :파이썬 스타 버전 풀고 2.7

파이썬 2.7, 최적의에서
>>> a, *b = (1, 2, 3) 
>>> b 
[2, 3] 
>>> a, *b = (1,) 
>>> b 
[] 

나는 (끔찍한,하지만 성가신되지 않음)입니다 가지고 올 수 :

c = (1, 2, 3) 
a, b = c[0], c[1:] if len(c) > 1 else [] 

__future__ 같은 부서에서이 문제를 가져올 수있는 방법이 있나요, 아니면 알 수없는 길이 파이썬 2.7에서 압축 풀기를 할 수있는 내 자신의 기능이 필요합니다?

+4

번호를 요구하는 것 같다. – JBernardo

+1

확장 된 풀기라고합니다. –

답변

25

파이썬 2.X에서, 당신은 할 수 있습니다 :

c = (1, 2, 3) 
a, b = c[0], c[1:] 

을 한 ccc[1:][]입니다 거기에 한 가지가있는 경우가 있기 때문에 작동 적어도 하나 명의 멤버가있다.

그래도 c에 하나 이상의 문자가 있는지 확인해야합니다. 그렇지 않으면 c[0]에서 예외가 발생합니다. 이 [] 측면에서 [없음]을 구별하지 않습니다 있지만

try: 
    c = tuple(c) 
    a, b = c[0], c[1:] 
except TypeError, IndexError: 
    # c is not iterable, or c is iterable, but it doesn't have any stuff in it. 
    # do something else 
    pass 
+3

'c'가 시퀀스 인 경우에만. 압축 풀기는 반복 가능하게 작동하므로 완전한 해결책을 위해서는'c = tuple (c)'를 먼저 수행하십시오. 이것은 무한 반복 실행을 포함하여 동작을 정확하게 에뮬레이션합니다. 그러나 당신은 여전히'a, * b, c = range (10)'에 대해 더 열심히 노력해야합니다; 그러나 그 주위에는 실제적인 방법이 없습니다. – lvc

+0

@lvc 좋은 지적. 내 대답을 편집했습니다. – Andbdrew

+2

@lvc man, 그'a, * b, c = range (10)'은 꽤 멋져요! – Andbdrew

2
(a,b) = (None, []) if not len(c) else (c[0], c[1:]) 

는 또한 C가 빈 시퀀스 인 경우를 처리하기위한 옵션입니다 :

당신이 뭔가를 할 수 a에 대한 과제로, b. 조심해서 사용하십시오. try/except가 아마도 가장 좋습니다.

빈 컨테이너를 처리 할 때 파이썬 3과 2.7 사이에 실제적인 차이점을 볼 수는 없지만, 여기서는 파이썬 3에 대한 좋은 점은 iterable과 함께 작동한다는 것입니다.

c가 생성기라는 것을 알고 있으면 2.7에서 작동합니다.

a,b = c.next(), c 

는하지만 풀기의 모든 아름다움은 몇 Py3k * 단지 * 특징 중 하나입니다 파이썬 3