为什么在Python中print
是关键字而非函数?
为什么在Python中print
是关键字而非函数?
print "foo"
变成了 print("foo")
。 - Bill Lynchprint
作为语句制定。 - steffenprint
在Python中曾经是一种语句,因为它在ABC语言中也是一种语句,而ABC语言是Python的主要灵感来源(尽管在那里它被称为WRITE
)。这可能反过来又有一个语句而不是函数,因为它是一种教学语言,因此受到基础语言的启发。然而,Python最终成为了一种不仅仅是教学语言的语言(尽管它也很适合用于教学)。
然而,现在的print
是一个函数。是的,在Python 2中,您可以这样做:
from __future__ import print_function
然后你就可以使用了。从Python 2.6版本开始支持。
现在,在Python 3中它是一个函数。
print
语句具有一些特殊的语法,这些语法对于普通函数是不可用的。例如,您可以使用尾随的,
来抑制最后一个换行符的输出,或者您可以使用>>
将输出重定向到文件中。但即使对于Guido van Rossum本人来说,所有这些也不足以使他相信它应该保留为语句——在Python 3.x中,他将print
转换为了一个函数。end=
和 file=
关键字参数来替代原来的特殊语法,但是它仍然存在。 - dan04这个答案并不一定要来自于官方 Python 历史,而是从我对 print
语句的欣赏中得出的结论。
Python 在某种程度上可以被称为一种脚本语言。现在有很多关于“脚本语言”的定义,但我在这里采用的是:一种专门设计用于编写短小或者交互式程序的语言。这种语言通常允许编写一行代码而无需过多的模板代码;通过避免过多的标点符号使得键盘输入更加便捷;并且提供内置的语法用于完成常见任务(虽然可能牺牲了一些纯粹性)。在 Python 中,打印一个值是非常常见的操作,尤其是在交互模式下。在此要求使用函数形式的 print
似乎是没有必要的。使用特殊语法进行打印操作的风险相对较低,并且能够正确地处理 99% 的情况。
input
也需要是一个语句。 - steffen我会谈一下我的想法:
在Python 2.x中,print
不是一个语句,这并非出于错误或因为向stdout
打印是一件基本的事情。其他所有东西都经过深思熟虑或至少有可以理解的原因,那么这样的错误似乎很奇怪。如果与stdout
通信被认为是如此基本的话,那么与stdin
通信也必须同样重要,但input()
是一个函数。
如果您查看保留关键字列表和语句列表,其中不是表达式的语句,print
显然很突出,这是另一个提示,说明必须有非常具体的原因。
我认为print
必须是一个语句而不是表达式,以避免在input()
中发生安全漏洞。请记住,在Python2中,input()
会评估用户键入到stdin
中的任何内容。如果用户键入print a
并且a
包含所有密码的列表,那将是非常灾难性的。
显然,input()
评估表达式的能力被认为比print
作为普通内置函数更重要。