显示对象的源代码
不是内置的对象
要打印 Python 对象的源代码,请使用 inspect
。请注意,这不适用于内置对象,也不适用于交互式定义的对象。对于这些,你将需要稍后解释的其他方法。
以下是如何从 random
模块打印方法 randint
的源代码:
import random
import inspect
print(inspect.getsource(random.randint))
# Output:
# def randint(self, a, b):
# """Return random integer in range [a, b], including both end points.
# """
#
# return self.randrange(a, b+1)
只打印文档字符串
print(inspect.getdoc(random.randint))
# Output:
# Return random integer in range [a, b], including both end points.
打印定义方法 random.randint
的文件的完整路径:
print(inspect.getfile(random.randint))
# c:\Python35\lib\random.py
print(random.randint.__code__.co_filename) # equivalent to the above
# c:\Python35\lib\random.py
对象以交互方式定义
如果以交互方式定义对象,则 inspect
无法提供源代码,但你可以使用 dill.source.getsource
代替
# define a new function in the interactive shell
def add(a, b):
return a + b
print(add.__code__.co_filename) # Output: <stdin>
import dill
print dill.source.getsource(add)
# def add(a, b):
return a + b
内置对象
Python 内置函数的源代码是用 c 编写的,只能通过查看 Python 的源代码(在 Mercurial 上托管或从 https://www.python.org/downloads/source/下载 )来访问 。
print(inspect.getsource(sorted)) # raises a TypeError
type(sorted) # <class 'builtin_function_or_method'>