|Title:||Make print a function|
|Last-Modified:||2007-10-12 13:25:27 -0700 (Fri, 12 Oct 2007)|
|Author:||Georg Brandl <georg at python.org>|
The title says it all -- this PEP proposes a new print() builtin that replaces the print statement and suggests a specific signature for the new function.
The print statement has long appeared on lists of dubious language features that are to be removed in Python 3000, such as Guido's "Python Regrets" presentation . As such, the objective of this PEP is not new, though it might become much disputed among Python developers.
The following arguments for a print() function are distilled from a python-3000 message by Guido himself :
The signature for print(), taken from various mailings and recently posted on the python-3000 list  is:
def print(*args, sep=' ', end='\n', file=None)
A call like:
print(a, b, c, file=sys.stderr)
will be equivalent to today's:
print >>sys.stderr, a, b, c
while the optional sep and end arguments specify what is printed between and after the arguments, respectively.
The softspace feature (a semi-secret attribute on files currently used to tell print whether to insert a space before the first item) will be removed. Therefore, there will not be a direct translation for today's:
print "a", print
which will not print a space between the "a" and the newline.
The changes proposed in this PEP will render most of today's print statements invalid. Only those which incidentally feature parentheses around all of their arguments will continue to be valid Python syntax in version 3.0, and of those, only the ones printing a single parenthesized value will continue to do the same thing. For example, in 2.x:
>>> print ("Hello") Hello >>> print ("Hello", "world") ('Hello', 'world')
whereas in 3.0:
>>> print ("Hello") Hello >>> print ("Hello", "world") Hello world
Luckily, as it is a statement in Python 2, print can be detected and replaced reliably and non-ambiguously by an automated tool, so there should be no major porting problems (provided someone writes the mentioned tool).
The proposed changes were implemented in the Python 3000 branch in the Subversion revisions 53685 to 53704. Most of the legacy code in the library has been converted too, but it is an ongoing effort to catch every print statement that may be left in the distribution.
|||Replacement for print in Python 3.0 (Guido van Rossum) http://mail.python.org/pipermail/python-dev/2005-September/056154.html|
|||print() parameters in py3k (Guido van Rossum) http://mail.python.org/pipermail/python-3000/2006-November/004485.html|
This document has been placed in the public domain.