我可以使用inspect.getsource(obj)
获取函数的源代码。
print(inspect.getsource(gcd))
它打印gcd
函数的源代码。当我尝试以下操作时,会抛出错误。
>>>print(inspect.getsource(print))
File "<stdin>", line 1
print(inspect.getsourcelines(print))
^
SyntaxError: invalid syntax
我可以获得打印源代码吗?如果是,如何?,如果没有为什么?
答案 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。