在我看来,您的辩论是一场辩论,而不是一个问题,您是否真的要接受一个答案,表明您在主张中的错误和严重程度?
关于您的辩论要点:
There are other operators, such as
import which we write as a statement,
though their functionality is actually
duplicated with a function __import__
绝对错误:函数
__import__
(就像
的每个其他的其他函数一样-和操作符)在“调用者”(包含该代码的代码)范围内没有名称绑定(bind)名称-绑定(bind)了“调用者的作用域”
必须是一个语句(就像Assignment,
def
和
call
一样)。您的“观点”似乎完全错过了Python在语句和表达式之间绘制的极其深刻而关键的区别-人们可能会不喜欢这种区别,但是忽略它是最明显的错误。
Python语句是Python编译器必须特别注意的事情-它们可能会更改名称的绑定(bind),可能会更改控制流,并且/或者在某些情况下可能需要从生成的字节码中完全删除(后者适用于
assert
) 。
print
是Python 2中此断言的
唯一异常(exception);通过从语句表中删除它,Python 3删除了一个异常,使一般的断言“成立”,因此是一种更常规的语言。
特殊情况尚不足以打破规则长期以来一直是Pythonic的宗旨(在交互式解释器的
import this
提示符下执行
>>>
以查看显示的“Python的禅宗”),并且对语言的更改消除了对此宗旨的违反由于早期的错误设计决定,该设计必须保留很多年。
To beginners, the operator print does
not belong to the general application
logic. To them it's the mysterious
operator which is a culmination of
their program. They expect it to look
differently.
尽早治愈初学者的误解是一件好事。
All the beginner books which were
describing basic Python 2.x are now
guaranteed to be broken from the fist
example. Certainly, languages
sometimes changes, but changes are
usually less visible to novices.
语言很少以深度和向后不兼容的方式进行更改(Python大约每十年进行一次),并且“新手都很难看到”语言功能,因此观察到的总数很小,但是即使在很小的指南针中,我们也可以轻松地进行观察。查找反例,对于初学者来说,高可见度的功能设计得很糟糕,以至于删除它是值得的。例如,现代的Basic语言(例如Microsoft的Visual Basic)不使用用户输入的明确的行号,这是一个可怕且对所有人几乎都可见的“功能”,因为它在Basic的早期方言中是必需的。 Lisp的现代变体(从Scheme开始)不使用动态作用域,这是一个功能失误,对于初学者来说,这种失误非常明显(通常在代码中表现为难以理解的错误),基本上是从他们开始使用Lisp编写函数开始1.5(我曾经是一个初学者,可以证明它咬我有多严重)。
It's not immediately obvious to me
that a functionality of print can be
duplicated on an application level.
For example, sometimes I would like to
redirect print from a console as a
modal OS dialog.
不知道我遵循这个“要点”。只需将
sys.stdout
更改为您喜欢的伪文件对象,然后重定向到您的心脏内容-您可以选择猴子修补内置函数
print
(在Python 2中是从未有过的),但是没有人会扭曲您的 ARM 并强制您这样做。
While people say it's hard to rewrite
all print statements to a function,
they have forced every Python 2.x
developer to do exactly that for all
their projects. Good, it's not hard
with automatic converter.
2to3
工具确实可以解决所有这些容易出现的表面不兼容问题-无需费力(并且除了
print
之外,还需要运行它来照顾更多的东西,因此人们确实在广泛使用它)。那么,您的“重点”是什么?
Everyone who enjoys having an ability
to manipulate function print would be
just as well-served if print was a
statement wrapping function print.
这样的安排本身不会删除不必要的关键字(最重要的是,不合理的
不规则性,如上所述,我说过:一条语句
no 的充分理由使
成为一条语句,因为绝对没有必要让编译器以任何方式,形状或形式来特别注意它!)。对我而言,拥有这样一个基础函数会增加任何真正的值(value)还远远不够,但是如果您有真正的用例,您当然可以在Python Ideas邮件列表中提出该案例-这样的基础函数,如果被证明确实很宝贵的话可以进行改进,以供Python 2.7中的
print
语句以及Python 3.2中的
print
函数使用。
但是,请考虑一种典型的情况,在这种情况下,可能需要猴子式的内置
print
:添加关键字参数以允许花哨的调整。您显然建议使用的
__print__
函数如何通过
__print__
语句生成那些KW参数?比
>> myfile
和结尾逗号的恐怖还有趣的语法...?!通过使用
print
作为函数,关键字参数仅遵循适用于每个函数和函数调用
的完全正常和普通的规则-幸福!
因此,总而言之,print
成为函数更像Python一样,因为它消除了异常,特殊情况以及对怪异的特殊语法的任何需要-简单,规则和统一是Python的商标。