题
这个问题是缠着我对于相当一段时间(如由 我以前的问题):为什么到底是 print(x)
更好地(其定义是作为更python)比 print x
?
对于那些不知道的 print
声明变成能在Python3.0.正式文件是在 PEP3105 和动机是在 Guido van Rossum的电子邮件.
那些点中,我想作一个对应:
- 还有其他运营商,例如
import
这是我们写的一份声明,虽然它们的功能性实际上是重复的一个函数__import__
- 对初学者来说,操作者
print
不属于一般应用程序的逻辑。对他们来说,这是个神秘的操作者,它是一个顶峰他们的程序。他们期望它看起来不同。 - 所有的初级书,其中描述的基本蟒蛇2.x是现在 保证是打破从第一例.当然,语言有时会改变,但这些变化通常是不可见的新手。
- 它不会立即显而易见,我认一个功能
print
可以重复的应用程序上的水平。例如,有时候,我谨向印刷从控制台作为一个模式OS对话。 - 虽然人们说这很难改写所有
print
发言的功能,他们被迫每蟒蛇2.x开发这样做的所有项目。好,这不是自动转换器。 - 每个人都喜欢具有能力操纵功能
print
将只是作为良好的服务如果print
是个声明包装的功能__print__
.
- 对初学者来说,操作者
因此,我们可以请一个典型的回答这个问题的网页上堆溢?
解决方案
在我看来就像你是一个辩论,不是一个问题-你真的要接受的答案,说明如何深刻和严重的错误你在你的论断?!
你的辩论要点:
还有其他运营商,例如 进口这是我们写的一份声明, 虽然它们的功能是实际上 重复功能
__import__
绝对错误的:功能 __import__
(喜欢 每 其他功能--和操作者,对于这个问题)的结合 没有 名称的范围"主叫"(码包含它的)--任何"聊天工具",结合名称中的"呼叫者的范围" 必须 以一个声明(就像的分配, def
, , call
).你的"点"的出现完全错过了极其深刻和重要的区别,蟒蛇绘制之间的发言和表达方式--一个可以合理 不喜欢 这一区分,但是 忽视了 这是最明显的是,只是错误的。
蟒蛇的声明是事情的蟒蛇编译器必须具体了解--他们可能改变结合的名称,可能改变控制的流动,和/或可能需要完全删除,从而产生码在某些条件(后者适用于 assert
). print
是的 只 例外这一说法在蟒蛇2;通过消除它从名册的发言,Python3中删除一个例外,使得一般性断言,"只要坚持",因此是更经常的语言。 特殊情况下并不特别足以破坏规则 长期以来一直Python宗旨(做 import this
在一个互动的解释的 >>>
提示看"禅宗的蟒"所显示的),这种变化的语言中删除了违反这一原则,必须保持对于多年来由于早期的、错误设计的决定。
对初学者来说,操作者不打印 不属于一般应用 逻辑。对他们来说,这是神秘的 操作员,这是一个高潮 他们的程序。他们期望它看起来 不同。
固化的初学者他们的误解,尽早是一个非常好的事情。
所有初学者的书了 描述基本蟒蛇2.x是现在 保证是打破从拳头 例。当然,语言 有时候的变化,但变化是 通常低可见于新手。
语言很少发生变化在深度和向后兼容的方式(蟒蛇不大约每十年一次)和一些语言的特点是"高度可见的新手",所以总的意见数量很小--然而,即使在这小小的指南针我们可以很容易地找到反的例子,其中一个特性的高度可见于初学者只是如此糟糕的设计就是消除它的破坏。例如,现代的方言的基础,如Microsoft的视觉基本的、不使用明确的用户进行数字,"特征",这既是可怕的和高度可见的绝对每个人,因为它是强制性的,在早期的方言的基础。现代变种List(从方案开始)不使用动态范围,misfeature这是可悲的高度可见(通常表现为难以理解的错误,在他们的代码),以初学者来说,基本上尽快他们开始写作的功能在舌头1.5(我曾经是一个初学者在,并可以证明有多严重,这位我)。
它不会立即显而易见我 这一功能打印可以 复制一个应用程序的水平。例如,有时我想 重定向打印,从控制台作为一个 模式OS对话。
不知道我跟这个"点"。只是改变 sys.stdout
你最喜欢的伪文件的对象向你的心脏的内容--你有 选项 猴子修补内的功能 print
(这你从来没有在蟒蛇2),但是没有人扭转你的胳膊和强迫你这样做。
虽然人们说这是难以重写 所有打印的发言的功能, 他们被迫每蟒蛇2.x 开发这样做的所有 他们的项目。好的,这并不难 有自动转换器。
的 2to3
工具确实照顾所有这些方便面的不兼容问题--无汗(它需要运行,无论如何照顾相当多的更多的想 print
, 所以人们使用它广泛地).那么,什么是你的"点"这里?
每个人都喜欢有一种能力 操纵功能打印将 正如良好的服务,如果是一个打印 声明包装的功能 印.
这样的安排将不,本身,删除不必要的关键词(和最特别的是,没有理由的 不规则, 正如我上面所解释:一个声明 没有 很好的理由 可 发言,因为没有绝对需要编译器是专门意识到这在任何方式或形式!).这是远远不清楚,我认具有这种基本功能会增加任何真正的价值,但是如果你有真正使用情况下,你肯定可以提出的情况在Python想法的邮件列表--这样一个基本功能,如果被证明是宝贵的确,可以改装用于通过 print
发言Python2.7以及通过 print
功能Python3.2.
然而,考虑一个典型的情况下,其中一个可能会想猴子-修补内 print
:增加关键词的论点,以允许花式的调整。怎么会 __print__
功能你显然提出过ge这些KW辩论的一个 __print__
发言?一些前所未见的语法尚于恐怖的 >> myfile
和后的逗号...?!与 print
作为一个功能,关键的参数按照仅仅是完全正常的和普通的规则,适用于 每 功能和功能的电话-幸福!
所以,总而言之,它是更为Python print
是一个功能,因为它消除异常情况,特殊情况和需要进行任何怪异的特殊的语法--简单性、规律性和一致性是蟒蛇的商标。
其他提示
这里的原因我讨厌打印的发言2.x.
>>> something()
<something instance at 0xdeadbeef>
>>> print something()
<something instance at 0xdeadbeef>
毫无价值的对象没有有用的 __str__
, 我可以处理,看看这更多一些。
>>> dir(something())
['foo', 'bar', 'baz', 'wonderful']
>>> help(something().foo)
"foo(self, callable)"
嗯..所以没有,可采取的论点?
>>> something().foo(print)
something().foo(print)
^
SyntaxError: invalid syntax
>>> something().foo(lambda *args: print(*args))
something().foo(lambda *args: print(*args))
^
SyntaxError: invalid syntax
所以...我需要定义一个函数的使用
>>> def myPrint(*args): print *args
def myPrint(*args): print *args
^
SyntaxError: invalid syntax
>>> def myPrint(*args): print args
...
>>> myPrint(1)
(1,)
不寒而栗,或者使用 sys.stdout.write
, ,这几乎是为cludgy,因为它具有非常不同的行为 print
.它还 看起来 不同的,这意味着我会几乎从来不会记得它的存在。
使用 print
报表在一个短短的,一类型的设施,然后提高到使用记录或者更好的东西只是不优雅的.如果打印的工作就像这些东西,特别是可能被用于与高秩序职能,随后,它会更好,不仅仅是你的东西时使用的你不用 真的 记录或 真的 调试器。
的 print
声明还带有不同寻常的 >>
语法印刷的以特定的文件。有没有其他发言蟒蛇,这种语法,所以它是非常独特的方式。
我相信你是正确的,虽然,最大的问题 print
声明可能已经解决了通过引入一个 __print__
功能。
我发现GvR的"印是唯一的应用程序级别的功能,有一个声明致力于它的"有说服力的。蟒蛇是一个通用的语言,并且不应该有一份声明,用于输出到流作为一个经营者,或者关键词。
它不是python因为语法应该是:
stdout.append("Hello World")
或
stdout += "hello world"
免责声明:我喜欢蟒蛇,真的。
在一个严重的注意...
我认为,蟒蛇的对象模型和'实施它自己的方法的东西喜欢的属性的能见度是很大的。我认为,这一切都是一个目的方法面向对象,甚至对象的定义为对象的集合的结构是非常明确的态度。
什么我担心Python将要做的就是成为一种语言,不明它的意图在一个明确的方式...和我讨厌看到美丽的原则会陷入过度的思想的已经非常规语法的介绍。有点像 口齿不清, ,美观,在它的结构,严峻的,恕我直言,在它的语法。