摘要 标题已说明了一切——本 PEP 提议使用新的内置函数 print() 来替代 print 语句,并建议给此新函数使用特殊的签名(signature )。 原理阐述 print 语句 早就被列在了不可靠的语言特性列表中,例如 Guido 的“Python 之悔”(Python Regrets)演讲【1】,并计划在 Python 3000 版本移除。因此,本 PEP 的目的并不新鲜,尽管它可能会在 Python 开发人员中引起较大争议。 以下对 print() 函数的争议是提取自 Guido 本人的 Python-3000 消息【2】:
设计规格 print() 的书写方式取自各种邮件,最近发布在 python-3000 列表里的是【3】: def print(*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", 它不会在“a”与换行符之间打印一个空格。 (译注:在 3.3 版本,print() 函数又做了改动,增加了默认参数 flush=False) 向后兼容性 本 PEP 中提出的改动将致使如今的 print 语句失效。只有那些恰好用括号包围了所有参数的写法才能在 Python 3 版本中生效,至于其它,只有加上了括号的值才能保持原样打印。例如,在 2.x 中: >>> print ("Hello") 而在 3.0 中: >>> print ("Hello") 幸运的是,因为 print 是 Python 2 中的一个语句,所以它可以被通过自动化工具而检测到,并可靠而精确地替换掉,因此应该没有重大的移植问题(如果有人来写这个工具的话)。 实现 更改将在 Python 3000 分支中实现(修订版从 53685 到 53704)。大多数在维库代码(legacy code)已经做转换了,但要抓出发行版本中的每个 print 语句,还需要持续不断地努力。 |
|
来自: 千锋Python学堂 > 《Python基础教程分享》