2010-12-10 15 views
10

为什么print是python中的关键字而不是函数?为什么print不是python中的函数?

+2

请参阅http://www.python.org/dev/peps/pep-3105/ – jfs 2010-12-10 22:39:12

+0

有趣;从未认为这是一个问题,但很好的问题。 – 2010-12-10 22:41:34

+0

readln和writeln也是在Turbo Pascal中内置的。永远不要理解为什么,而且我更喜欢C来让它们变得更好。 – sashoalm 2014-04-24 11:42:13

回答

12

因为Guido已经决定他犯了一个错误。 :)

它已经得到纠正:尝试Python 3,它专用section of its release notes来描述对函数的更改。

整个背景,请参阅PEP 3105和其参考文献部分提供的几个链接!

+0

我还没有用Python 3修饰过。 print关键字仍然工作吗? – user538442 2010-12-10 22:38:49

+2

不是。现在这是一个功能。在简单的情况下,'print'foo“'变成'print(”foo“)' – 2010-12-10 22:43:46

+0

在”now a function“中更正:) – 2010-12-10 22:43:59

2

现在是在Python 3

+0

似乎有些奇怪,它需要10年以上的时间才能纠正它 – user538442 2010-12-10 22:38:09

+1

@user:这不一定是时间问题,而是一个兼容性问题,无论是向前还是向后。 – 2010-12-10 22:56:20

+4

@ user538442:向后兼容性是一个婊子:( – delnan 2010-12-10 22:56:20

1

功能在Python 2.x中的print语句具有一些特殊的语法,这将不是一个普通的函数可用。例如,您可以使用尾部,来抑制最终换行符的输出,或者可以使用>>将输出重定向到文件。但是,所有这些都不足以让Guido van Rossum自己保留一个声明 - 他在Python 3.x中将print转换为函数。

+0

呃,现在这是开始有意义的。 – user538442 2010-12-10 22:39:31

+0

因此,额外的功能现在丢失,但如果尾随和>> – user538442 2010-12-10 22:39:59

+5

它仍然存在,但现在你使用'end ='和'file ='关键字参数,而不是特殊的语法。 – dan04 2010-12-10 22:45:11

8

print Python中的语句,因为它是在美国广播公司,为Python的主要灵感的声明(尽管它被称为WRITE那里)。这反过来可能有一个声明,而不是一个功能,因为它是一种教学语言,因此受到基本的启发。另一方面,Python原来不仅仅是一种教学语言(尽管它也很好)。

不过,现在的print的一个函数。是的,在Python 2中,你也可以做

from __future__ import print_function 

并且你已经设置好了。自Python 2.6起作用。

1

,从我欣赏对print语句,但不一定是从Python的官方历史,绘制一个答案......

Python是,在一定程度上,一个脚本语言。现在,有很多“脚本语言”的定义,但我将在这里使用的是:为有效使用简短或交互式程序而设计的语言。这样的语言倾向于允许单行程序而没有过多的样板文件;使键盘输入更容易(例如,避免过多的标点符号);并为常见任务提供内置语法(方便尽可能牺牲纯度)。在Python的情况下,打印一个值是非常常见的事情,特别是在交互模式下。要求print是一个功能,这似乎在这里不必要的麻烦。有99%的时间做正确的事情的特殊语法的错误风险要低得多。

+0

通过这个参数'input'也需要一个语句。 – steffen 2015-05-12 13:47:24

0

我会在我的心中扔在此:

在Python 2.x的print不是错误的陈述,或因为打印到stdout是这样做的一个基本的东西。其他的事情都是如此认真思考,或者至少有一个可以理解的理由,那就是这个订单的错误看起来很奇怪。如果与stdout通信本来就是如此基本,与stdin沟通将必须同样重要,但input()是一个功能。

如果你看看list of reserved keywordslist of statements哪些不是表达式,print明显突出显示,这是另一个暗示,必须有非常具体的原因。

我认为print是一个语句,而不是一个表达式,以避免在input()安全漏洞。请记住,Python2中的input()可评估用户输入的任何内容,如stdin。如果用户键入print aa包含所有密码的列表,那将是安静的灾难性的。

显然,input()评估表达式的能力被认为比print是一个正常的内置函数更重要。

相关问题