복붙노트

[PYTHON] bool ()과 operator.truth () 사이의 차이점은 무엇입니까?

PYTHON

bool ()과 operator.truth () 사이의 차이점은 무엇입니까?

bool () 및 operator.truth ()는 값이 true 또는 falsy인지 여부를 테스트하고 docs와 다소 비슷하게 보입니다. truth () 문서에서도 다음과 같이 표시됩니다.

그러나, truth ()는 간단한 테스트에서 bool ()보다 두 배 이상 빠릅니다 (Python 3.6 타이밍이 표시되지만 2.7은 비슷합니다).

from timeit import timeit
print(timeit('bool(1)', number=10000000))
# 2.180289956042543
print(timeit('truth(1)', setup='from operator import truth', number=10000000))
# 0.7202018899843097

그래서 차이점은 무엇입니까? bool () 대신 truth ()를 사용해야합니까?

이 질문에 대한 ShadowRanger와의 광범위한 의견과 토론을 통해이 Q & A가 나왔습니다.

해결법

  1. ==============================

    1.bool ()과 operator.truth ()가 주요 사용 사례에 대해 동일한 결과를 출력하지만 실제로 구현은 다소 다릅니다. bool ()은 클래스 또는 유형 생성자이며 truth ()는 좁은 최적화 된 일반 함수입니다.

    bool ()과 operator.truth ()가 주요 사용 사례에 대해 동일한 결과를 출력하지만 실제로 구현은 다소 다릅니다. bool ()은 클래스 또는 유형 생성자이며 truth ()는 좁은 최적화 된 일반 함수입니다.

    실용적인 측면에서 두 가지 차이점도 있습니다. 1) 인수가없는 bool ()은 false를 반환하고 truth ()은 인수가 필요합니다. 2) bool ()은 bool (x = 1)과 같이 x 키워드의 인수를 허용하지만, truth ()는 키워드 인수를 사용하지 않습니다. 이 두 가지 모두 bool ()에 대한 일반 사용 사례의 오버 헤드를 추가합니다.

    아무도 그것을 필요로하지 않을 것이기 때문에 핵심 단어 구현은 이상합니다. x라는 이름은 거의 서술 적이 지 않습니다. Issue29695에서는이 문제를 다루고 있으며, 사실이 문제는 bool ()뿐 아니라 int () 또는 list ()와 같은 다른 클래스에도 영향을 미칩니다. 그러나 파이썬 3.7 이후부터는 이러한 주요 단어 인수가 제거되고 속도가 향상됩니다. 그럼에도 불구하고 필자는 가장 최근의 Python 3.8 분기에서 타이밍을 테스트했으며 bool ()은 이전보다 빠르지 만 여전히 bool ()의보다 일반적인 구현으로 인해 truth ()보다 두 배 이상 느립니다.

    따라서 속도가 중요한 작업을 수행하는 경우 bool ()을 통해 truth ()를 사용하는 것이 좋습니다 (예 : sorted ()에 대한 키로 구문 분석하는 경우). 그러나 khelwood가 지적했듯이 bool ()은 필터 (bool, iterable)와 같이 여전히 가끔 빠를 수 있으므로 최상의 옵션을 확신하는 시간을 갖는 것이 가장 좋습니다.

    물론 함수가 필요없고 값이 진실인지 위증인지 테스트하고 싶다면 khelwood와 user2357112가 주석을 달아서 가장 빠르다는 if 또는 not 문을 사용해야합니다.

    이 질문에 대한 ShadowRanger와의 광범위한 의견과 토론을 통해이 Q & A가 나왔습니다.

  2. from https://stackoverflow.com/questions/49009870/what-are-the-differences-between-bool-and-operator-truth by cc-by-sa and MIT license