当前位置: 首页 > 图灵资讯 > 行业资讯> print为什么在3时变成了函数?

print为什么在3时变成了函数?

来源:图灵python
时间: 2025-02-27 18:40:45

原理阐述

print 语句长期以来,它一直被列入不可靠的语言特征列表,例如 Guido 的“Python 之悔”(Python Regrets)演讲[1]并计划 Python 3000 删除版本。所以,本 PEP 目的并不新鲜,尽管它可能存在 Python 在开发人员中引起了很大的争议。

以下对 print() 关于函数的争议是提取自 Guido 本人的 Python-3000 消息【2】:

  • print 它是唯一具有专属语句的应用程序级功能。在 Python 在这个世界上,当一些任务无法在编译器的帮助下完成时,语法(syntax)它通常被用作最后一种手段。在这种异常情况下,print 并不合适。

  • 人们在开发应用程序时,往往需要用更复杂的东西来代替 print 例如,调用输出 logging,或者调用其他的 I/O 库。至于 print() 函数,这是一个直接的字符替换,现在它混合了所有的括号,也可以转换 >>stream 语法风格。

  • 为 print 特殊语法的设置只会给进化带来更大的屏障,比如猜测和新语法 printf() 函数很快就会出现,跟随 print() 函数共存。

  • 当需要不同的分隔符(不是空格,也不是没有分隔符)时,没有简单的方法可以使用 print 句子转换为另一个调用。同样,当使用其他分隔符而不是空格时,也不能轻易打印对象。

  • 如果 print() 它是一个函数,可以很容易地在一个模块中替换它(只需要) def print(*args):..),甚至可以在整个程序中替换(例如,放置不同的方法进入 __builtin__.print)。事实上,要做到这一点,你也可以写一条带子 write() 方法类,然后定向给出sys.stdout,这个想法不错,但无疑是一个非常巨大的概念飞跃,跟随 print 它在不同的层次上工作。

设计规格

print() 写作方式取自各种邮件,最近发布 python-3000 列表中有[3]:

defprint(*args,sep='',end='\n',file=None)

调用像:

print(a,b,c,file=sys.stderr)

相当于现在:

print>>sys.stderr,a,b,c

可选的 sep 与 end 参数对每个打印参数之间及之后的内容进行了相应的指定。

softspace功能(当前文件中的半秘密属性,用于告知 print 是否在第一条目前插入空间将被删除。因此,以下当前版本的写作方法不能直接转换:

print"a",print

它不会在“a在换行符之间打印一个空间。

(译注:在 3.3 版本,print() 函数又改变了,增加了默认参数 flush=False)

向后兼容性

本 PEP 中提出的变化将导致今天的变化 print 句子失效。只有那些恰好用括号包围所有参数的写法,才能在 Python 3 至于其他版本,只有括号值才能保持原始打印。例如,在 2.x 中:

>>>print("Hello")Hello
>>>print("Hello","world")
('Hello','world')

而在 3.0 中:

>>>print("Hello")Hello
>>>print("Hello","world")
Helloworld

幸运的是,因为 print 是 Python 2 其中一个句子可以通过自动化工具检测到,可靠准确地更换,因此应该没有重大的移植问题(如果有人写这个工具)。

实现

更改将在 Python 3000 在分支中实现(修订版从修订版(修订版从分支中实现) 53685 到 53704)。大部分是维库代码(legacy code)转换已经完成,但发行版本中的每个版本都应该被捕获 print 句子,也需要不断的努力。

参考资料

[1]http://legacy.python.org/doc/essays/ppt/regrets/PythonRegrets.pdf

[2]Python 3.0 替换 print(Guido van Rossum)

https://mail.python.org/pipermail/python-dev/2005-September/056154.html

[3] py3k 中 print() 的参数(Guido van Rossum)

https://mail.python.org/pipermail/python-3000/2006-November/004485.html


请关注python自学网了解更多关于python的文章。