프로그래밍 언어/Python

Python 변수가 함수인지 확인하는 방법

Rateye 2021. 8. 23. 10:39
728x90
반응형
질문 : 파이썬 변수가 함수인지 어떻게 감지합니까?

변수 x 가 있고 그것이 함수를 가리키는 지 여부를 알고 싶습니다.

다음과 같이 할 수 있기를 바랐습니다.

>>> isinstance(x, function)

그러나 그것은 나에게 준다.

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  NameError: name 'function' is not defined
  

내가 선택한 이유는

>>> type(x)
  <type 'function'>
  
답변

Python 2.x 또는 Python 3.2 이상인 경우 callable() 사용할 수 있습니다. 이전에는 더 이상 사용되지 않았지만 이제는 더 이상 사용되지 않으므로 다시 사용할 수 있습니다. 여기에서 토론을 읽을 수 있습니다 : http://bugs.python.org/issue10518 . 다음과 같이 할 수 있습니다.

callable(obj)
  

이것이 Python 3.x이지만 3.2 이전 인 경우 객체에 __call__ 속성이 있는지 확인하십시오. 다음과 같이 할 수 있습니다.

hasattr(obj, '__call__')
  

자주 제안 types.FunctionTypes 또는 inspect.isfunction 접근 방식 (모두가 할 똑같은 일을 )주의의 번호와 함께 제공됩니다. 비 Python 함수에 대해 False 를 반환합니다. 예를 들어 대부분의 내장 함수 는 Python이 아닌 C로 구현되므로 False 를 반환합니다.

>>> isinstance(open, types.FunctionType)
  False
  >>> callable(open)
  True
  

따라서 types.FunctionType 은 놀라운 결과를 제공 할 수 있습니다. 오리 유형 개체의 속성을 확인하는 올바른 방법은 오리 크기의 컨테이너에 맞는지 확인하는 것이 아니라 돌팔이인지 묻는 것입니다.

출처 : https://stackoverflow.com/questions/624926/how-do-i-detect-whether-a-python-variable-is-a-function
728x90
반응형