source

Python 테스트 없음

manycodes 2022. 11. 16. 21:30
반응형

Python 테스트 없음

이 중에서 '없음' 테스트는 아닙니다.

if val != None:

if not (val is None):

if val is not None:

어떤 것이 더 좋으며, 그 이유는 무엇입니까?

if val is not None:
    # ...

변수가 설정되지 않은 것을 테스트하기 위한 피토닉어 관용어입니다.None이 관용구는 키워드 함수를 디폴트 파라미터로 선언하는 경우에 특히 사용됩니다. is는 Python에서 ID를 테스트합니다.왜냐하면 의 인스턴스는 하나밖에 없기 때문이다.None실행 중인 Python 스크립트/프로그램에 표시됩니다.is최적의 테스트입니다.Johnsyweb이 지적한 바와 같이, 이는 PEP 8의 "프로그래밍 권장 사항"에서 설명합니다.

이것이 왜 바람직한지에 대해서는

if not (val is None):
    # ...

이는 단순히 "가독성이 중요하다"는 Python의 Zen의 일부일 뿐입니다.Good Python은 좋은 의사 코드에 가깝습니다.

시작, 프로그래밍 권장 사항, PEP 8:

없음과 같은 싱글톤과의 비교는 항상 다음과 같이 수행해야 합니다.is또는is not, 등호 연산자는 사용하지 않습니다.

또한, 글쓰기에 주의하세요.if x정말이라면if x is not None- 예를 들어 기본값인 변수 또는 인수가 다른 값으로 설정되었는지 테스트하는 경우.다른 값에는 부울 컨텍스트에서 false일 수 있는 유형(예: 컨테이너)이 있을 수 있습니다.

PEP 8은 모든 Python 프로그래머에게 필수적인 읽을거리입니다.

이런 종류의 질문을 하는 가장 좋은 방법은 비단뱀이 정확히 무엇을 하는지 보는 것입니다.이 모듈은 매우 유용한 정보입니다.

>>> import dis
>>> dis.dis("val != None")
  1           0 LOAD_NAME                0 (val)
              2 LOAD_CONST               0 (None)
              4 COMPARE_OP               3 (!=)
              6 RETURN_VALUE
>>> dis.dis("not (val is None)")
  1           0 LOAD_NAME                0 (val)
              2 LOAD_CONST               0 (None)
              4 COMPARE_OP               9 (is not)
              6 RETURN_VALUE
>>> dis.dis("val is not None")
  1           0 LOAD_NAME                0 (val)
              2 LOAD_CONST               0 (None)
              4 COMPARE_OP               9 (is not)
              6 RETURN_VALUE

Python은 마지막 두 사례가 동일한 작업 시퀀스로 감소한다는 점에 유의하십시오.not (val is None)연산자를 사용합니다.첫 번째는 연산자를 사용하여None.

다른 답변에서 지적된 바와 같이!=와 비교하면None좋지 않은 생각입니다.

후자 둘 중 어느 쪽이든, 그 이후로는val잠재적으로 정의되는 타입일 수 있습니다.__eq__()지나가면 진실로 돌아오다None.

언급URL : https://stackoverflow.com/questions/3965104/not-none-test-in-python

반응형