대 요즘 일부 tweets 및으로 hasattr에 대한 python documentation을 읽고 그리고 그것은 말한다 :파이썬으로 hasattr getattr
으로 hasattr (객체 명)
인수는 객체와 문자열입니다. 문자열이 객체의 속성 중 하나 인 경우 결과는 True이고 그렇지 않으면 False입니다. 은 (이것은 getattr (개체, 이름)을 호출하고 그것이 AttributeError를 제기 여부보고에 의해 구현됩니다.) 그 용서를 물어 쉽게이 말한다 파이썬에서 모토가있다
내가 보통 동의하는 허가보다. 결과에
import timeit
definition="""\
class A(object):
a = 1
a = A()
"""
stm="""\
hasattr(a, 'a')
"""
print timeit.timeit(stmt=stm, setup=definition, number=10000000)
stm="""\
getattr(a, 'a')
"""
print timeit.timeit(stmt=stm, setup=definition, number=10000000)
:
$ python test.py
hasattr(a, 'a')
1.26515984535
getattr(a, 'a')
1.32518696785
I've가 무슨 일 경우 속성 아무튼 또한 시도
나는 정말 간단한 파이썬 코드로이 경우에는 성능 테스트를하려고 존재하지 않으며 getattr과 hasattr 사이의 차이가 더 큽니다. 그래서 지금까지 내가 본 것은 getattr이 hasattr보다 느리다는 것입니다.하지만 getattr을 호출하는 문서에서 말합니다. 는 I've는 hasattr 및 getattr의 CPython의 구현을 검색하고는 모두 다음 함수를 호출 할 것 같다 :v = PyObject_GetAttr(v, name);
을하지만, 아마 느리게 만드는으로 hasattr보다 getattr 더 상용구가 있습니다.
누구나 문서에서 우리는 hasattr이 getattr을 호출한다고 말하고 있습니다. 실제로 성능 때문에 isattr 대신 getattr을 사용하도록 권장하는 것 같습니다. 그것은 단지 더 파이톤이기 때문입니까? 어쩌면 나는 내 테스트 :
감사에서 뭔가 잘못하고있는 중이 야
,
라울
여기의 차이 성능이 아닙니다. 당신은 5 나노초 정도를 말하는 겁니다. 파이썬 만 사용하면 수천 번을 잃어 버릴 수 있습니다. 차이점은 여기에 필요한 것이 맞는지 여부입니다. – cHao
성능 차이가 그다지 중요하지 않았습니다. 나는 그것이 getattr을 호출하는 것으로 구현되었다는 것을 설명하는 문서의 주석이 왜 있었는지 이해하지 못했습니다. – raulcumplido
어쩌면 한 번에'getattr'을 호출했는데 지금은 그렇지 않지만 아무도 문서를 업데이트하지 않았습니다 ...? 솔직히, 그것은 어쨌든 API 문서에 속하지 않는 종류의 성명서입니다. 문서는 "어떻게"가 "무엇"의 필수적인 부분이 아닌 한, 일어나는 일이 아니라 어떻게되는지를 설명해야합니다. – cHao