如何检查打印源代码

时间:2015-01-07 09:06:51

标签: python python-2.7 inspect

我可以使用inspect.getsource(obj)获取函数的源代码。

print(inspect.getsource(gcd))

它打印gcd函数的源代码。当我尝试以下操作时,会抛出错误。

>>>print(inspect.getsource(print))

  File "<stdin>", line 1
     print(inspect.getsourcelines(print))
                                 ^
  SyntaxError: invalid syntax

我可以获得打印源代码吗?如果是,如何?,如果没有为什么?

1 个答案:

答案 0 :(得分:4)

回答比vaultah提供的欺骗目标更多的信息。

以下答案直接针对3.x,我注意到你仍然在2.x.有关此问题的详细说明,请查看此answer

你实际上是在正确的道路上,但问题是print是内置的,所以inspect.getsource在这里不太好。

这就是说:

>>> inspect.getsource.__doc__
'Return the text of the source code for an object.

The argument may be a module, class, method, function, traceback, frame,    
or code object.  The source code is returned as a single string.  An
OSError is raised if the source code cannot be retrieved.'

print属于type的位置:

>>> type(print)
<class 'builtin_function_or_method'>

更具体地说:

>>> print.__module__
'builtins'

多么不幸,getsource不支持。

你有选择:

1)浏览Python source code,看看你的内置功能是如何实现的。在我的情况下,我几乎总是使用CPython,所以我从CPython directory开始。

由于我们知道我们正在寻找builtin模块,因此我们进入/Python目录并查找看起来包含内置模块的内容。 bltinmodule.c是一个安全的猜测。知道必须将打印定义为可调用的函数,搜索print(并向右跳到builtin_print(Pyobject...定义的位置。

2)对内置函数名称约定进行幸运猜测,并在代码库中搜索builtin_print

3)使用在幕后发挥魔力的工具,例如Puneeth Chaganti的Cinspect