代码之家  ›  专栏  ›  技术社区  ›  max

python 3:如何检查一个对象是否是一个函数?[副本]

  •  11
  • max  · 技术社区  · 14 年前

    这个问题已经有了答案:

    假设所有函数(内置的或用户定义的)都属于同一个类,但默认情况下该类似乎没有绑定到任何变量,这是正确的吗?

    如何检查对象是否为函数?

    我想我能做到:

    def is_function(x):
      def tmp()
        pass
      return type(x) is type(tmp)
    

    它看起来不整洁,我甚至不能百分之百肯定它是完全正确的。

    4 回复  |  直到 14 年前
        1
  •  14
  •   dan_waterworth    14 年前

    在python2中:

    callable(fn)
    

    在python3中:

    isinstance(fn, collections.Callable)
    

    由于Callable是一个抽象基类,因此它相当于:

    hasattr(fn, '__call__')
    
        2
  •  4
  •   pyfunc    14 年前

    如何检查对象是否为函数?

    这和检查可调用文件不一样吗

    hasattr(object, '__call__')
    

    也在python 2.x中

    callable(object) == True
    
        3
  •  1
  •   Frédéric Hamidi    14 年前

    你可以这样做:

    def is_function(x):
        import types
        return isinstance(x, types.FunctionType) \
            or isinstance(x, types.BuiltinFunctionType)
    
        4
  •  -2
  •   poke    14 年前
    try:
        magicVariable()
    except TypeError as e:
        print( 'was no function' )