我在Python中有一个函数迭代从dir(obj)返回的属性,我想检查其中包含的任何对象是否是函数,方法,内置函数等.通常你可以使用callable()为此,但我不想包含类.到目前为止我提出的最好的是:
isinstance(obj, (types.BuiltinFunctionType, types.FunctionType, types.MethodType))
是否有更加面向未来的方法来进行此项检查?
编辑:我错过了之前我说:"通常你可以使用callable(),但我不想取消课程资格." 其实我也想取消其参赛资格类.我想只匹配函数,而不是类.
检查模块正是您想要的:
inspect.isroutine( obj )
仅供参考,代码是:
def isroutine(object): """Return true if the object is any kind of function or method.""" return (isbuiltin(object) or isfunction(object) or ismethod(object) or ismethoddescriptor(object))
如果要排除可能有__call__
方法的类和其他随机对象,并且只检查函数和方法,则模块中的这三个函数inspect
inspect.isfunction(obj) inspect.isbuiltin(obj) inspect.ismethod(obj)
应该以面向未来的方式做你想做的事.