环境: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--------------
答案 0 :(得分:5)
print
不是函数。有一个单独的 print语句,它是语言语法的一部分。 print
不是标识符。这是一个关键字。
答案 1 :(得分:5)
简短的回答是,在Python 2中,print
不是函数,而是statement。
在所有版本的Python中,几乎一切都是对象。所有对象都有一个类型。我们可以通过将type
函数应用于对象来发现对象的类型。
使用解释器,我们可以看到内置函数sum
和ord
正是Python类型系统中的内容:
>>> type(sum)
<type 'builtin_function_or_method'>
>>> type(ord)
<type 'builtin_function_or_method'>
但是下面的表达式甚至不是有效的Python:
>>> type(print)
SyntaxError: invalid syntax
这是因为名称print
本身就是一个关键字,例如if
或return
。关键字是不是对象。
更完整的答案是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错误。