inspect.isfunction doesn't work for all modules?
我正在尝试使用以下答案:是否可以列出模块中的所有功能?列出一系列模块中的功能。但在我的翻译中,我得到如下信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (In tel)] on win32 Type"help","copyright","credits" or"license" for more information. >>> import inspect >>> import math >>> math.pow(5,4) 625.0 >>> inspect.getmembers(math, inspect.isfunction) [] >>> inspect.getmembers(inspect, inspect.isfunction) [('_check_class', <function _check_class at 0x00C9F9C0>), ('_check_instance', <f unction _check_instance at 0x00C9F978>), ('_get_user_defined_method', <function _get_user_defined_method at 0x00C9FB70>), ('_getfullargs', <function _getfullarg s at 0x00C6A4F8>), ('_is_type', <function _is_type at 0x00C9FA08>), ('_missing_a rguments', <function _missing_arguments at 0x00C9F198>), ('_shadowed_dict', <fun ction _shadowed_dict at 0x00C9FA50>)... foo, bar, etc] >>> math <module 'math' (built-in)> >>> inspect <module 'inspect' from 'E:\\Python33\\lib\\inspect.py'> >>> import win32api >>> inspect.getmembers(win32api, inspect.isfunction) [] >>> win32api <module 'win32api' from 'E:\\Python33\\lib\\site-packages\\win32\\win32api.pyd'> |
和往常一样,我假设有一些非常明显的原因,可以解释为什么它没有列出我尝试的一半模块中的所有函数。我能猜测的最好的一点是isfunction()只适用于.py模块?如果有一个与我的愚蠢无关的先天问题,有没有办法纠正这个问题?
这显然是isfunction()的问题,因为getmembers似乎工作正常:
1 2 3 4 5 6 7 8 9 | >>> import math >>> import inspect >>> inspect.getmembers(math) [('__doc__', 'This module is always available. It provides access to the mathe matical functions defined by the C standard.'), ('__loader__', <class '_frozen_i mportlib.BuiltinImporter'>), ('__name__', 'math'), ('__package__', ''), ('acos', <built-in function acos>), ('acosh', <built-in function acosh>), ('asin', <buil t-in function asin>)... foo, bar, etc] |
我知道有一个dir()可以使用,但它并没有那么整洁。
C定义函数不是用户定义的
列出模块中所有功能的防错方法是使用
Return true if the object is a user-defined or built-in function or method.
1 2 3 4 | >>> import inspect >>> import math >>> inspect.getmembers(math, inspect.isroutine) [('acos', <built-in function acos>), ('acosh', <built-in function acosh>), ('asin', <built-in function asin>), ('asinh', <built-in function asinh>), ('atan', <built-in function atan>), ('atan2', <built-in function atan2>), ('atanh', <built-in function atanh>), ('ceil', <built-in function ceil>), ('copysign', <built-in function copysign>), ('cos', <built-in function cos>), ('cosh', <built-in function cosh>), ('degrees', <built-in function degrees>), ('erf', <built-in function erf>), ('erfc', <built-in function erfc>), ('exp', <built-in function exp>), ('expm1', <built-in function expm1>), ('fabs', <built-in function fabs>), ('factorial', <built-in function factorial>), ('floor', <built-in function floor>), ('fmod', <built-in function fmod>), ('frexp', <built-in function frexp>), ('fsum', <built-in function fsum>), ('gamma', <built-in function gamma>), ('hypot', <built-in function hypot>), ('isinf', <built-in function isinf>), ('isnan', <built-in function isnan>), ('ldexp', <built-in function ldexp>), ('lgamma', <built-in function lgamma>), ('log', <built-in function log>), ('log10', <built-in function log10>), ('log1p', <built-in function log1p>), ('modf', <built-in function modf>), ('pow', <built-in function pow>), ('radians', <built-in function radians>), ('sin', <built-in function sin>), ('sinh', <built-in function sinh>), ('sqrt', <built-in function sqrt>), ('tan', <built-in function tan>), ('tanh', <built-in function tanh>), ('trunc', <built-in function trunc>)] |
注意每个函数对象的字符串表示形式的
如果
您是否阅读了
Return true if the object is a Python function
所以不,它不适用于内置函数。
你可以用