본문 바로가기
Python/Python FAQ

Python 변수가 함수인지 감지하는 방법은 무엇인가요?, How do I detect whether a variable is a function?

by 베타코드 2023. 6. 6.
반응형

질문


나는 변수 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를 반환합니다. 대부분의 내장 함수는 C로 구현되어 있으므로 Python이 아니므로 False를 반환합니다:

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

따라서 types.FunctionType은 예상치 못한 결과를 반환할 수 있습니다. 덕 타이핑된 객체의 속성을 확인하는 올바른 방법은 그것들이 꽥꽥 소리를 내는지 묻는 것입니다. 오리 크기의 컨테이너에 맞는지 확인하는 것이 아닙니다.

반응형

댓글