파이썬 인터프리터로 실험하던 중 ' is' 연산자입니다. 특히 'is'는 함수 내에서 평가할 때 True를 반환하지만 함수 외부에서 평가할 때는 False를 반환합니다.
>>> def func(): ... a = 1000 ... b = 1000 ... return a is b ... >>> a = 1000 >>> b = 1000 >>> a is b, func() (False, True)
'is'는 객체의 'id'를 평가하므로 이는 'func' 함수 내에서 다음을 의미합니다. 'a'와 'b'는 동일한 int 인스턴스를 참조합니다. 그러나 함수 외부에서는 다른 개체를 참조합니다. 왜 그럴까요?
Python 참조 매뉴얼은 통찰력 있는 설명을 제공합니다.
"블록은 하나의 단위로 실행되는 Python 프로그램 텍스트 조각입니다. . 대화형으로 입력된 각 명령은 블록입니다."
함수 내에는 숫자 1000에 대해 하나의 개체만 포함하는 단일 코드 블록이 존재합니다. 따라서 'id(a)' 및 'id(b)' 동일한 값을 반환하면 True 평가가 발생합니다.
함수 외부에는 각각 1000에 대한 개체를 갖는 두 개의 별도 코드 개체가 있습니다. 따라서 'id(a)' 및 'id(b) '가 다르기 때문에 잘못된 평가로 이어집니다.
이러한 특징은 정수에만 국한되지 않습니다. 예를 들어 부동 소수점 리터럴에서도 비슷한 결과가 관찰됩니다. 객체의 정체성을 비교하는 것('is' 사용)은 일반적으로 권장되지 않습니다. 대신 항등 연산자('==')를 사용해야 합니다.
더 명확하게 이해하기 위해 두 경우 모두에 대한 코드 개체를 자세히 살펴볼 수 있습니다.
'func' 함수 내:
>>> print(dis.code_info(func)) ... Constants: 0: None 1: 1000
'a'와 'b' 모두에 할당된 1000에 대한 단일 'int' 인스턴스가 있습니다.
'func' 함수 외부:
>>> com1 = compile("a=1000", filename="", mode="single") >>> com2 = compile("b=1000", filename="", mode="single") >>> id(com1.co_consts[0]) == id(com2.co_consts[0]) False
각 코드 객체에는 1000의 인스턴스가 있어 False 평가로 이어지는 것을 볼 수 있습니다.
위 내용은 \'is\' 연산자가 Python의 함수 내부 및 외부에서 캐시되지 않은 정수와 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!