显示对象的源代码

不是内置的对象

要打印 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'>