2013-07-15 3 views
1

실제로 세 가지 예가 있습니다.TypeError : 'int'객체가 반복 가능하지 않습니다. 왜 그런 일이 발생합니까?

>>> result = [] 
>>> for k in range(10): 
>>> result += k*k 

>>> result = [] 
>>> for k in range(10): 
>>> result.append(k*k) 

>>> result = [k*k for k in range(10)] 

처음으로 오류가 발생합니다. 오류는 다음과 같이 인쇄됩니다.

TypeError: 'int' object is not iterable 

그러나 두 번째 및 세 번째는 잘 작동합니다.

나는이 세 문장의 차이점을 이해할 수 없었다.

+0

관련 항목 : [ "i + = x"가 파이썬에서 "i = i + x"와 다른 점은 언제입니까?] (http://stackoverflow.com/questions/15376509/when-is-ix-different-from- iix-in-python) –

답변

7

목록 개체의 적절한 추가는 반복 가능한 요소로 목록을 확장합니다. k*k은 반복 가능하지 않으므로 실제로 목록에 추가 할 수는 없습니다.

result += [k*k] 
4

result가 (처음, 아니 항목 포함) 목록 객체입니다

당신은 반복 가능한 k*k을 확인해야합니다.

목록에있는 += 연산자는 기본적으로 오른쪽에있는 어떤 것에서도 extend 메서드를 호출하는 것과 같습니다. (여기에는 약간의 차이점이 있지만 여기서는 관련이 없지만 자세한 내용은 python2 programming FAQ을 참조하십시오.) 목록의 extend 메서드는 (단일) 인수를 반복하려고 시도하며 int은 반복 할 수 없습니다.

(물론, append 메서드는 그 (단일) 인수를 추가하기 때문에 잘 작동합니다. 목록 이해는 내부적으로 매우 다르며 목록 작성이 훨씬 적은 비용으로 완료되므로 가장 효율적인 방법입니다 내부 흐림 정도)

0

문자열이나 시퀀스가 ​​아닌 정수를 반복합니다. result += k*k의 경우 k가 문자열/시퀀스 입력 인 경우에만 true이고 k가 숫자이면 결과는 계속 합계가됩니다. result.append(k*k)의 경우 k가 문자열인지 숫자인지에 따라 결과에 순차적으로 추가됩니다.

관련 문제