어떤 것이 기능인지 확인하는 것은 호출 가능한지 확인하는 것과 다릅니다. 대개 개체가 호출 가능한지 확인하고 싶습니다 (이 개체를 함수처럼 사용할 수 있습니까?).
함수는 몇 가지 유형의 호출 가능 함수 중 하나입니다.
- 순수 파이썬 함수
- 방법
- 클래스/
__call__
방법과 인스턴스
- 기본 제공된 (C) 순수 파이썬 함수 중 하나
lambda
되는 것이다
함수 : 그들이있다 또는 def
문을 사용하여 정의 할 수 있습니다. 메서드는 클래스에 존재하며 인스턴스를 통해 액세스 한 함수입니다. 기본적으로 인스턴스로 바인딩 된 첫 번째 인수가있는 함수입니다. 클래스 및 객체는 클래스가 __call__
메소드를 구현할 경우 호출 할 수 있습니다 (모든 클래스는 기본적으로 호출 가능하지만 모든 객체는 호출 할 수 없음). 내장 함수는 Python이 아닌 C로 작성된 함수입니다.
무언가가 호출 가능한지 확인하려면 callable
기능을 사용하십시오. 예.
>>> callable(lambda: None)
True
>>> class X:
def f(self):
pass
>>> callable(X().f)
True
>>> callable(object)
True
>>> callable(len)
True
당신이 객체가 다음 types
모듈을 사용하여 호출의 특정 부속 유형 중 하나인지 확인하십시오.
>>> from types import FunctionType, BuiltinFunctionType, MethodType
>>> isinstance((lambda: None), FunctionType)
True
>>> class X:
def f(self):
pass
>>> isinstance(X().f, FunctionType)
False
>>> isinstance(X.f, FunctionType) # False in Python 2.x
True
>>> isinstance(object, FunctionType)
False
>>> isinstance(len, FunctionType)
False
다른 유형의 경우 collections.abc
모듈을 사용할 수 있습니다. 여기에 정의 된 클래스는 서브 클래스의 인스턴스를 스펙으로 확인하는 추상 기본 클래스이거나 오브젝트가 해당 유형의 인스턴스로 작동 할 수 있는지 확인하는 데 사용될 수 있습니다. 예.
from collections.abc import Generator
def my_generator():
yield
assert isinstance(my_generator(), Generator)
assert type(my_generator()) is not Generator
정확히 어떤 목적으로? 특정 변수에 * lambda *가 있는지 테스트하고 싶습니까? 뭔가가 있다면 테스트를 위해 보통 isinstance를 사용합니다 *. – deceze
'import types' 다음에'types.FunctionType' – muddyfish
"문서에 가장 적합한 답변을 추가하십시오." 왜? – Evert