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

조회수 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 답변

  • 좋아요

    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
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)