2013-12-19 2 views
2

은 배열입니다. eventTokens은 문자열 (값의 첫 번째 요소)입니다. 이중 과제는 무엇을합니까? (eventToken1 & eventToken2의 값은 무엇입니까?)Python - 한 문자열에서 2 개의 변수 할당

values = data.split("\x01") 

eventTokens = values.pop(0) 
eventToken1, eventToken2 = eventTokens 

나는 (파이썬 소스에) 출력 작업을 수행 한 다음 결과 그 :

eventTokens is →☹ 
eventToken1 is → 
eventToken2 is ☹ 

내가 결론을 어떻게 든 바르가 초기 문자열을 나눕니다. 내가 (분명히) 비슷한 일을 컴파일 시도하는 경우에는 :

arr = ["some", "elements", "inarray"] 
c = arr.pop(0) 
a, b = c 
print c 
print a 
print b 

그것은 예외 결과 : 에 ValueError : 너무 많은 값이 압축을 풀 수 있습니다.

참고 : print

답변

2

변수 개봉 한 줄에 여러 변수 할당의 파이썬의 능력이다. 제약 조건은 표현식의 오른쪽에있는 반복 가능이 왼쪽에있는 변수의 길이와 같아야한다는 것입니다. 그렇지 않으면 too many 또는 to little values to unpack 예외가 발생합니다.

당신이 eventTokens 같은 크기 2의 문자열이있는 경우

당신은, 할 수있는 가정된다 :

>>>a,b = 'ab' 
>>>a 
'a' 
>>>b 
'b' 

이 매우 안전하지 않은 코드입니다. 어떻게 든 eventTokens이 두 요소보다 커지면 코드가 예외를 발생시켜 프로그램이 종료됩니다.

희망이 도움이됩니다.

3

c = arr.pop(0) 반환 "some" 여기에 테스트 환경에서 매개 변수화 된 방법이 아닙니다,하지만 당신은 (4 리터가되는 경우) 따라서, a, b = c이 단계에서이 개 변수에 값을 할당하려고 실패하고있다.

이 대신 eventTokens 이후

arr = ["some", "elements", "inarray"] 
c = arr.pop(0) 
a, b = arr 
print c 
print a 
print b 
+0

이 답변은 올바르지 않습니다. "너무 많은 값을 푸는 데"오류가 발생하는 이유는 c가 4 자이고 두 개의 변수로 압축을 풀려고하기 때문입니다. a, b, d, e = c가 작동합니다. – Jimothy

+0

@Jimothy 나는 OP가 'a, b = arr'이 아니라 'a, b = c'가 아니라고 믿습니다. 그래서이 예제는 – karthikr

+0

맞습니다.나는'a, b = c'가 오류를 나타내는 이유에 대한 설명을 잘못 했어야했다. – Jimothy

3

길이 두 문자열 인을 시도, 그것은 두 개의 단일 문자열로 압축 해제 할 수 있습니다

>>> a, b = 'ab' 
>>> a 
'a' 
>>> b 
'b' 

그러나, 문자열의 문자 수는해야 압축을 해제 할 변수의 수와 일치시킵니다.

>>> a, b = 'abcd' 
ValueError: too many values to unpack 

변수 에 하나의 변수를 풀 수 있습니다.

>>> a, = 'x' 
>>> a 
'x' 
>>> a, = 'xyz' 
ValueError: too many values to unpack 
관련 문제