Python 如何检查打印的源代码

Python 如何检查打印的源代码,python,python-2.7,inspect,Python,Python 2.7,Inspect,我可以使用inspect.getsource(obj)获取函数的源代码 它打印gcd函数的源代码。当我尝试以下操作时,它会抛出错误 >>>print(inspect.getsource(print)) File "<stdin>", line 1 print(inspect.getsourcelines(print)) ^ SyntaxError: invalid syntax

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

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

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

  File "<stdin>", line 1
     print(inspect.getsourcelines(print))
                                 ^
  SyntaxError: invalid syntax
打印(inspect.getsource(打印)) 文件“”,第1行 打印(检查.getsourcelines(打印)) ^ SyntaxError:无效语法
我可以得到打印的源代码吗?;如果是,如何?如果否,为什么?

回答以添加比Vault提供的复制目标更多的信息

下面的答案直接针对3.x,我注意到您仍然使用2.x。要想得到一篇关于这方面的好文章,请看这个

实际上,您在这方面的做法是正确的,但问题是,
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.'
其中as
print
类型

>>> type(print)
<class 'builtin_function_or_method'>
多么不幸,
getsource
不支持它

您可以选择:

1) 浏览并查看内置的是如何实现的。在我的例子中,我几乎总是使用CPython,所以我从最开始

因为我们知道我们正在寻找一个
内置的
模块,所以我们进入
/Python
目录,寻找一些看起来好像包含内置模块的东西
bltinmodule.c
是一个安全的猜测。知道print必须被定义为一个可调用的函数,搜索
print(
),我们就跳到定义它的地方

2) 幸运地猜测内置函数名约定,并在代码库中搜索
builtin\u print


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

回答以添加比vaultah提供的dupe目标更多的信息

下面的答案直接针对3.x,我注意到您仍然使用2.x。要想得到一篇关于这方面的好文章,请看这个

实际上,您在这方面的做法是正确的,但问题是,
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.'
其中as
print
类型

>>> type(print)
<class 'builtin_function_or_method'>
多么不幸,
getsource
不支持它

您可以选择:

1) 浏览并查看内置的是如何实现的。在我的例子中,我几乎总是使用CPython,所以我从最开始

因为我们知道我们正在寻找一个
内置的
模块,所以我们进入
/Python
目录,寻找一些看起来好像包含内置模块的东西
bltinmodule.c
是一个安全的猜测。知道print必须被定义为一个可调用的函数,搜索
print(
),我们就跳到定义它的地方

2) 幸运地猜测内置函数名约定,并在代码库中搜索
builtin\u print


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

不,因为
print
是一个用C编写的函数。
inspect
只能获取Python函数的源代码。您知道Python是开源的,因此整个源代码都可以在线获取,对吗?您可以直接从存储库中获取它,而不是使用
inspect
(这会引发语法错误,因为
print
是python 2中的语言关键字,而不是python 3中的函数)。@Martin Pieters这不是该问题的重复。我无法获得打印的源代码。我只想看到print的实现,而不是所有的内置函数,我想知道这个错误的原因。我会问一个不同的问题:为什么?关于
打印
,您想了解什么?顺便说一句,您可以在python 2中使用
from\uuuuu future\uuuuuu import print\u函数使用print函数,但其行为与
print
语句不同。不,因为
print
是一个函数,用C编写。
inspect
只能获取Python函数的源代码。您知道Python是开源的,因此整个源代码都可以在线获取,对吗?您可以直接从存储库中获取它,而不是使用
inspect
(这会引发语法错误,因为
print
是python 2中的语言关键字,而不是python 3中的函数)。@Martin Pieters这不是该问题的重复。我无法获得打印的源代码。我只想看到print的实现,而不是所有的内置函数,我想知道这个错误的原因。我会问一个不同的问题:为什么?关于
打印
,您想了解什么?顺便说一句,您可以使用python 2中的“打印”函数(使用
from\uuuuu future\uuuuuu import print\u函数)
,但它的行为与
print
语句不同。您的答案对python 3.x有效,但OP使用的是python 2.7,其中
print
是一条语句。@Brunodesshuilliers是的,我在发布后注意到了这一点。我必须运行以处理一些重要的内容,稍后将进行编辑。您的答案对Python 3.x有效,但OP使用的是Python 2.7,其中
print
是一条语句。@Brunodesshuilliers是的,我在发布后注意到了这一点。我必须跑去处理一些重要的事情,稍后再编辑。