抽象标题说明了一切——本PEP提出了一个新的内置函数print()来代替print语句,并为这个新函数提出了一个特殊的签名。基本原理print语句早已被列入不可靠语言特性列表,例如Guido的“Python遗憾”(PythonRegrets)演讲[1],并计划在Python3000版本中移除。因此,这个PEP的目的并不新鲜,尽管它在Python开发人员中可能颇具争议。print()函数的以下参数是从Guido自己的Python-3000消息[2]中提取的:print是唯一的应用程序级函数,并且有自己的语句。在Python世界中,当某些任务没有编译器的帮助就无法完成时,语法通常被用作最后的手段。在这种特殊情况下,打印是不合适的。在开发应用程序时,人们经常需要用更复杂的东西来代替打印输出,比如调用日志记录,或者调用其他I/O库。至于print()函数,它是一个直接的字符替换,现在它混合了所有这些括号并可能转换>>stream风格的语法。为打印设置特殊的语法只会给进化带来更大的障碍。例如,有一种猜想,很快就会出现一个新的printf()函数,与print()函数共存。当需要不同的定界符(除了空格或无定界符)时,没有简单的方法将打印语句转换为另一个调用。同样,当使用除空格之外的其他分隔符时,根本无法方便地打印对象。如果print()是一个函数,它可以很容易地在一个模块中被替换(只需defprint(*args):…),甚至在整个程序中(例如,在__builtin__.print中放置一个不同的方法)。其实要做到这一点,你也可以写一个类,有write()方法,然后直接到sys.stdout,这是个好主意,但绝对是一个非常巨大的概念飞跃,而且和print相比,它在不同级别工作。设计规范print()的写法取自各种email。最近发布在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中提出的变化将导致当前打印语句失败。只有恰好将所有参数都括在括号中的那些才能在Python3版本中工作,至于其他,只有带括号的值才能按原样打印。例如,在2.x中:>>>print("Hello")Hello>>>print("Hello","world")('Hello','world')而在3.0中:>>>print("Hello")Hello>>>print("Hello","world")Helloworld幸运的是,因为print是Python2中的语句,它可以被自动化工具检测到并可靠准确地替换,所以应该没有大的移植问题(如果有人编写过该工具)。实施更改将在Python3000分支(修订版53685到53704)中实施。大多数遗留代码已被转换,但要捕获发布版本中的每个打印语句,仍在不断努力。以上就是本次分享的全部内容。想了解更多python知识,请前往公众号:Python编程学习圈,发“J”免费领取,每日干货分享
