python打印功能不完全是普通的功能吗?

时间:2011-04-21 08:37:40

标签: python

环境:python 2.x

如果print是内置函数,为什么的行为与其他函数一样? print有什么特别之处?

-----------start session--------------
>>> ord 'a'
Exception : invalid syntax
>>> ord('a')
97
>>> print 'a'
a
>>> print('a') 
a
>>> ord
<built-in function ord>
>>> print

-----------finish session--------------

4 个答案:

答案 0 :(得分:5)

3以下Python版本中的

print不是函数。有一个单独的 print语句,它是语言语法的一部分。 print不是标识符。这是一个关键字。

答案 1 :(得分:5)

简短的回答是,在Python 2中,print不是函数,而是statement

在所有版本的Python中,几乎一切都是对象。所有对象都有一个类型。我们可以通过将type函数应用于对象来发现对象的类型。

使用解释器,我们可以看到内置函数sumord正是Python类型系统中的内容:

>>> type(sum)
<type 'builtin_function_or_method'>
>>> type(ord)
<type 'builtin_function_or_method'>

但是下面的表达式甚至不是有效的Python:

>>> type(print)
SyntaxError: invalid syntax

这是因为名称print本身就是一个关键字,例如ifreturn。关键字是不是对象。

更完整的答案是print可以是语句,也可以是函数,具体取决于上下文。

在Python 3中,print不再是声明,而是function

在Python 2中,您可以通过在模块顶部包含此语句,将模块中的print语句替换为Python 3 print函数的equivalent

from __future__ import print_function

此特殊导入仅适用于Python 2.6及更高版本。

有关更完整的说明,请参阅我的答案中的文档链接。

答案 2 :(得分:2)

这笔交易是print只是从 python 3 分支开始的内置函数。看起来你正在使用python2。

退房:

print "foo"; # Works in python2, not in python3
print("foo"); # Works in python3

答案 3 :(得分:1)

print更像是关键字而不是python中的函数。解析器“知道”print的特殊语法(参数周围没有括号)以及如何处理它。我认为Python创建者希望通过这样做来保持语法简单。正如maverik已经提到过的那样,在python3中,print会被调用,就像任何其他函数一样,如果以旧的方式执行它,就会抛出一个syx错误。