In response to issue 1101, place vastly more emphasis on the new print()

function.
This commit is contained in:
Guido van Rossum 2007-09-06 14:46:41 +00:00
parent 67ced426bc
commit dff1c31fb4
1 changed files with 42 additions and 17 deletions

View File

@ -79,6 +79,48 @@ and fast errors; it's the subtle behavioral changes in code that
remains syntactically valid that trips people up. I'm also omitting remains syntactically valid that trips people up. I'm also omitting
changes to rarely used features.) changes to rarely used features.)
* The ``print`` statement has been replaced with a ``print()`` function,
with keyword arguments to replace most of the special syntax of the
old ``print`` statement (PEP 3105). Examples::
Old: print "The answer is", 2*2
New: print("The answer is", 2*2)
Old: print x, # Trailing comma suppresses newline
New: print(x, end=" ") # Appends a space instead of a newline
Old: print # Prints a newline
New: print() # You must call the function!
Old: print >>sys.stderr, "fatal error"
New: print("fatal error", file=sys.stderr)
Old: print (x, y) # prints repr((x, y))
New: print((x, y)) # Not the same as print(x, y)!
You can also customize the separator between items, e.g.::
print("There are <", 2**32, "> possibilities!", sep="")
which produces::
There are <4294967296> possibilities!
Notes about the ``print()`` function:
* The ``print()`` function doesn't support the "softspace" feature of
the old ``print`` statement. For example, in Python 2.x,
``print "A\n", "B"`` would write ``"A\nB\n"``; but in Python 3.0,
``print("A\n", "B")`` writes ``"A\n B\n"``.
* Initially, you'll be finding yourself typing the old ``print x``
a lot in interactive mode. Time to retrain your fingers to type
``print(x)`` instead!
* When using the ``2to3`` source-to-source conversion tool, all
``print`` statements are autmatically converted to ``print()``
function calls, so this is mostly a non-issue for larger projects.
* Python 3.0 uses strings and bytes instead of the Unicode strings and * Python 3.0 uses strings and bytes instead of the Unicode strings and
8-bit strings. This means that pretty much all code that uses 8-bit strings. This means that pretty much all code that uses
Unicode, encodings or binary data in any way has to change. The Unicode, encodings or binary data in any way has to change. The
@ -109,19 +151,6 @@ changes to rarely used features.)
* Code that unconditionally strips the trailing ``L`` from the ``repr()`` * Code that unconditionally strips the trailing ``L`` from the ``repr()``
of a long integer will chop off the last digit instead. of a long integer will chop off the last digit instead.
* The ``print()`` function doesn't support the "softspace" feature of
the old ``print`` statement. For example, in Python 2.x,
``print "A\n", "B"`` would write ``"A\nB\n"``; but in Python 3.0,
``print("A\n", "B")`` writes ``"A\n B\n"``.
* Also, ``print`` and ``print (x, y)`` behave differently without
warning: the former used to add a newline in 2.x, but does nothing
in 3.0; the latter used to print the ``repr()`` of a tuple in 2.x,
but prints the individual values in 3.0.
* You'll be finding yourself typing ``print x`` a lot in interactive
mode. Time to retrain your fingers. :-)
Strings and Bytes Strings and Bytes
================= =================
@ -241,10 +270,6 @@ language and built-in functions.
* PEP 3104: ``nonlocal`` statement. Using ``nonlocal x`` you can now * PEP 3104: ``nonlocal`` statement. Using ``nonlocal x`` you can now
assign directly to a variable in an outer (but non-global) scope. assign directly to a variable in an outer (but non-global) scope.
* PEP 3105: ``print`` is now a function. Keyword arguments
``file=sys.stdout``, ``sep=" "`` and ``end="\n"`` let you customize
it.
* PEP 3111: ``raw_input()`` renamed to ``input()``. That is, the new * PEP 3111: ``raw_input()`` renamed to ``input()``. That is, the new
``input()`` function reads a line from ``sys.stdin`` and returns it ``input()`` function reads a line from ``sys.stdin`` and returns it
with the trailing newline stripped. It raises ``EOFError`` if the with the trailing newline stripped. It raises ``EOFError`` if the