从Python获取所有函数,类,数据类型

时间:2016-06-04 12:10:01

标签: python

我正在开发一个小型python学习应用程序。学生只需搜索listdate等关键字,我的应用就会将输出作为关键字的帮助文字。

首先我要提取所有python内置函数,类帮助文本使用help()到json文件中。 我试过了:

>>> import sys
>>> sys.modules.keys()
['__future__', 'copy_reg', 'sre_compile', '_hashlib', '_sre', 'encodings', 'site', '__builtin__', 'datetime', '__main__', 'encodings.encodings', 'hashlib', 'abc', 'posixpath', '_random', '_weakrefset', 'errno', 'binascii', 'encodings.codecs', 'sre_constants', 're', '_abcoll', 'types', '_codecs', '_warnings', 'math', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path', '_locale', 'sitecustomize', 'signal', 'random', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'sre_parse', 'os', '_weakref']

以上结果我可以提取

>>> bi = sys.modules.get('__builtin__')
>>> help(bi.list.append) (or)
>>> bi.list.append.__doc__
'L.append(object) -- append object to end'  # goes to json file

sys.modules提供rerandom等。但我在上面的模块列表中找不到datetime 。如何从python中找到所有可用的函数,数据类型,类等?

注意:我的目标是尽可能从python中提取帮助文本。不仅sys.modules可以理解任何方法。

编辑:最初没有日期时间。

>>> import sys
>>> sys.modules.keys()
['copy_reg', 'encodings', 'site', '__builtin__', '__main__', 'encodings.encodings', 'abc', 'posixpath', '_weakrefset', 'errno', 'encodings.codecs', '_abcoll', 'types', '_codecs', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path', 'sitecustomize', 'signal', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'os', '_weakref']

导入datetime sys.modules

之后
>>> import datetime
>>> sys.modules.keys()
['copy_reg', 'encodings', 'site', '__builtin__', 'datetime', '__main__', 'encodings.encodings', 'abc', 'posixpath', '_weakrefset', 'errno', 'encodings.codecs', '_abcoll', 'types', '_codecs', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path', 'sitecustomize', 'signal', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'os', '_weakref']
>>> 

2 个答案:

答案 0 :(得分:3)

datetime是标准库的一部分;其datetime.datetime类型不是列表内置的,而是built-in type

如果您仍然坚持迭代sys.modules而不是looking it up,通常是equally interactively,则可能需要诉诸importing all standard libraries:     import sys

from stdlib_list import stdlib_list

for lib in stdlib_list("2.7"):
    try:
        __import__(lib)
    except ImportError:
        continue

assert 'datetime' in sys.modules

print sys.modules.get('datetime').datetime.__doc__
# datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
#
# The year, month and day arguments are required. tzinfo may be None, or an
# instance of a tzinfo subclass. The remaining arguments may be ints or longs.

答案 1 :(得分:0)

您似乎想要创建自己的help()版本,您认为某种版本更适合学生使用。{1}}如果是这样,也许你可以从原来开始。您可以查看pydoc.py的来源(位于C:/Python34/lib/pydoc.py之类的地方),其中定义了help()。例如,帮助方法的实际代码开始:

def help(self, request):
        if type(request) is type(''):
            request = request.strip()
            if request == 'help': self.intro()
            elif request == 'keywords': self.listkeywords()
            elif request == 'symbols': self.listsymbols()
            elif request == 'topics': self.listtopics()
            elif request == 'modules': self.listmodules()

(后面还有几个elif条款)

您可以开始深入研究listkeywords(self)等的代码

了解help()如何查找其主题后,您就可以决定使用哪个主题了。

顺便说一句 - 上面的代码段表示只需在shell中输入help('keywords')等,就可以回答你的问题。