2016-08-22 6 views
3
number=26 
for n in range(101): 
    if n is number: 
     print(n, "This is the magic number") 
     break 
    else: 
     print(n) 

위 코드는 완벽하게 실행되지만 아래 변수와 범위를 변경하면 올바르게 작동하지 않습니다. 일반적으로파이썬 for 루프 반복 범위 변경 범위

number=260 
for n in range(300): 
    if n is number: 
     print(n, "This is the magic number") 
     break 
    else: 
     print(n) 
+0

특히 좋은 복제본은 아닙니다. 그것은 왜 두 번째가 실패하는지 설명하지만 첫 번째가 왜 실패하는지 설명하지 않습니다. – chepner

답변

4

, x == yx is y 또한 사실이다 보장하지 않습니다 진실되고. 첫 번째 코드는 작은 정수 (-5에서 257 사이)가 사전 할당 된 CPython의 특정 최적화를 활용하므로 이러한 정수를 사용하면 항상 동일한 객체가 사용됩니다.

일반적으로 리터럴이 동일한 개체를 참조한다고 가정하지 마십시오. 인터프리터는 리터럴을 사용할 때마다 새로운 객체를 자유롭게 할당 할 수 있습니다.

+1

우수 답변. 그것을 구축하기 위해, 나는 'is'와 '=='연산자의 차이점을 설명 할 것이라고 생각했습니다. 'a == b'인지 묻는 경우 a의 값이 b 값과 같은지 여부를 묻는 반면 'a is b'인지 묻는 경우 a와 b가 같은지 묻습니다. 파이썬 인터프리터의 관점은 메모리에서 같은 것을 가리키는 a와 b 두 개의 서로 다른 이름이다. [여기] (http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python)을 참조하십시오. – gowrath

+1

저는 Asker에게 그들이'=='와'is'의 차이점을 이미 알고 있다는 것을 의심스럽게 생각합니다. (발견하기 위해 많은 연구를하지 않기 때문에). 리터럴은 항상 동일한 객체를 참조한다고 가정하는 것이 합리적입니다. 그러나 파이썬에서는 그렇지 않습니다. – chepner