변수가 함수인지 아닌지 알아내려면?
조회수 2608회
발생하는 문제 및 실행환경
변수 x가 함수인지 아니면 그냥 일반적인 변수인지 알아내려면 어떻게 해야 하나요?
저는 x가 함수를 가리키고 있을 때
type(x)
= <type 'function'>
이길래
isinstance(x, function)
이렇게 썼는데 에러가 뜨네요. 어떻게 하면 되나요?
에러 메시지
Traceback (most recent call last): File "", line 1, in ? NameError: name 'function' is not defined The reason I picked that is because
1 답변
-
1. isinstance를 쓰는 방법
생성자가 없는
buitin
타입은 types모듈에 있습니다. 따라서 isinstance를 쓰려면 types모듈을 import 하고 isinstance의 파라미터로 types.FunctionType를 넘겨줘야 합니다.import types def myfunction(): pass myFunc = myfunction print isinstance(myFunc, types.FunctionType) #True
모듈을 따로 import 하기 싫을 때는 다음 방법을 이용해주세요
2. hasattr(object, name)을 쓰는 방법
모든 함수는 "호출" 할 수 있기 때문에
__call__
이라는 어트리뷰트를 갖고 있습니다. 따라서 다음과 같이 객체에__call__
이라는 어트리뷰트가 있는지 확인하는 방법으로 함수를 구분할 수 있습니다.def myfunction(): pass myFunc = myfunction print hasattr(myFunc, "__call__") #함수이므로 True myVal = 3 print hasattr(myVal, "__call__") #int형 객체이므로 False
댓글 입력