변수가 함수인지 아닌지 알아내려면?


발생하는 문제 및 실행환경

변수 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

  • 2016년 01월 19일에 작성됨

조회수 182


1 답변


좋아요
0
싫어요
채택취소하기

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
  • 2016년 01월 19일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close