1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
|
****************************
What's New in Python 3.0
****************************
:Author: Guido van Rossum
:Release: 0.1
.. Rules for maintenance:
* Anyone can add text to this document. Do not spend very much time
on the wording of your changes, because your text will probably
get rewritten to some degree.
* The maintainer will go through Misc/NEWS periodically and add
changes; it's therefore more important to add your changes to
Misc/NEWS than to this file.
* This is not a complete list of every single change; completeness
is the purpose of Misc/NEWS. Some changes I consider too small
or esoteric to include. If such a change is added to the text,
I'll just remove it. (This is another reason you shouldn't spend
too much time on writing your addition.)
* If you want to draw your new text to the attention of the
maintainer, add 'XXX' to the beginning of the paragraph or
section.
* It's OK to just add a fragmentary note about a change. For
example: "XXX Describe the transmogrify() function added to the
socket module." The maintainer will research the change and
write the necessary text.
* You can comment out your additions if you like, but it's not
necessary (especially when a final release is some months away).
* Credit the author of a patch or bugfix. Just the name is
sufficient; the e-mail address isn't necessary.
* It's helpful to add the bug/patch number as a comment:
% Patch 12345
XXX Describe the transmogrify() function added to the socket
module.
(Contributed by P.Y. Developer.)
This saves the maintainer the effort of going through the SVN log
when researching a change.
This article explains the new features in Python 3.0, comparing to 2.6
(or in some cases 2.5, since 2.6 isn't released yet).
The best estimate for a release date is August 2008.
This article doesn't attempt to provide a complete specification of
the new features, but instead provides a convenient overview. For
full details, you should refer to the documentation for Python 3.0. If
you want to understand the complete implementation and design
rationale, refer to the PEP for a particular new feature.
.. Compare with previous release in 2 - 3 sentences here.
.. add hyperlink when the documentation becomes available online.
.. ======================================================================
.. Large, PEP-level features and changes should be described here.
.. Should there be a new section here for 3k migration?
.. Or perhaps a more general section describing module changes/deprecation?
.. sets module deprecated
.. ======================================================================
Common Stumbling Blocks
=======================
This section briefly lists the changes that are more likely to trip
people up, without necessarily raising obvious errors. These are all
explained in more detail below. (I'm not listing syntactic changes
and removed or renamed features here, since those tend to produce hard
and fast errors; it's the subtle behavioral changes in code that
remains syntactically valid that trips people up. I'm also omitting
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
8-bit strings. This means that pretty much all code that uses
Unicode, encodings or binary data in any way has to change. The
change is for the better, as in the 2.x world there were numerous
bugs having to do with mixing encoded and unencoded text.
* Text files enforce an encoding; binary files use bytes. This means
that if a file is opened using an incorrect mode or encoding, I/O
will likely fail.
* ``map()`` and ``filter()`` return iterators. A quick fix is e.g.
``list(map(...))``, but a better fix is often to use a list
comprehension (especially when the original code uses ``lambda``).
Particularly tricky is ``map()`` invoked for the side effects of the
function; the correct transformation is to use a for-loop.
* ``dict`` methods ``.keys()``, ``.items()`` and ``.values()`` return
views instead of lists. For example, this no longer works:
``k = d.keys(); k.sort()``. Use ``k = sorted(d)`` instead.
* ``1/2`` returns a float. Use ``1//2`` to get the truncating behavior.
* The ``repr()`` of a long integer doesn't include the trailing ``L``
anymore, so code that unconditionally strips that character will
chop off the last digit instead.
Strings and Bytes
=================
* There is only one string type; its name is ``str`` but its behavior
and implementation are more like ``unicode`` in 2.x.
* The ``basestring`` superclass has been removed. The ``2to3`` tool
replaces every occurence of ``basestring`` with ``str``.
* PEP 3137: There is a new type, ``bytes``, to represent binary data
(and encoded text, which is treated as binary data until you decide
to decode it). The ``str`` and ``bytes`` types cannot be mixed; you
must always explicitly convert between them, using the ``.encode()``
(str -> bytes) or ``.decode()`` (bytes -> str) methods.
* PEP 3112: Bytes literals. E.g. b"abc".
* PEP 3120: UTF-8 default source encoding.
* PEP 3131: Non-ASCII identifiers. (However, the standard library
remains ASCII-only with the exception of contributor names in
comments.)
* PEP 3116: New I/O Implementation. The API is nearly 100% backwards
compatible, but completely reimplemented (currently mostly in
Python). Also, binary files use bytes instead of strings.
* The ``StringIO`` and ``cStringIO`` modules are gone. Instead,
import ``StringIO`` or ``BytesIO`` from the ``io`` module.
PEP 3101: A New Approach to String Formatting
=============================================
XXX
PEP 3106: Revamping ``.keys()``, ``.items()`` and ``.values()``
===============================================================
XXX
PEP 3107: Function Annotations
==============================
XXX
Exception Stuff
===============
* PEP 352: Exceptions must derive from BaseException. This is the
root of the exception hierarchy.
* StandardException was removed (already in 2.6).
* Dropping sequence behavior (slicing!) and ``.message`` attribute of
exception instances.
* PEP 3109: Raising exceptions. You must now use ``raise
Exception(args)`` instead of ``raise Exception, args``.
* PEP 3110: Catching exceptions.
* PEP 3134: Exception chaining. (The ``__context__`` feature from the
PEP hasn't been implemented yet in 3.0a1.)
New Class and Metaclass Stuff
=============================
* Classic classes are gone.
* PEP 3115: New Metaclass Syntax.
* PEP 3119: Abstract Base Classes (ABCs); ``@abstractmethod`` and
``@abstractproperty`` decorators; collection ABCs.
* PEP 3129: Class decorators.
* PEP 3141: Numeric ABCs.
Other Language Changes
======================
Here are most of the changes that Python 3.0 makes to the core Python
language and built-in functions.
* Removed backticks (use ``repr()`` instead).
* Removed ``<>`` (use ``!=`` instead).
* ``as`` and ``with`` are keywords.
* PEP 237: ``long`` renamed to ``int``. That is, there is only one
built-in integral type, named ``int``; but it behaves like the old
``long`` type, with the exception that the literal suffix ``L`` is
neither supported by the parser nor produced by ``repr()`` anymore.
``sys.maxint`` was also removed since the int type has no maximum
value anymore.
* PEP 238: int division returns a float.
* The ordering operators behave differently: for example, ``x < y``
where ``x`` and ``y`` have incompatible types raises ``TypeError``
instead of returning a pseudo-random boolean.
* ``__getslice__()`` and friends killed. The syntax ``a[i:j]`` now
translates to ``a.__getitem__(slice(i, j))`` (or ``__setitem__``
or ``__delitem__``, depending on context).
* PEP 3102: Keyword-only arguments. Named parameters occurring after
``*args`` in the parameter list *must* be specified using keyword
syntax in the call. You can also use a bare ``*`` in the parameter
list to indicate that you don't accept a variable-length argument
list, but you do have keyword-only arguments.
* PEP 3104: ``nonlocal`` statement. Using ``nonlocal x`` you can now
assign directly to a variable in an outer (but non-global) scope.
* PEP 3111: ``raw_input()`` renamed to ``input()``. That is, the new
``input()`` function reads a line from ``sys.stdin`` and returns it
with the trailing newline stripped. It raises ``EOFError`` if the
input is terminated prematurely. To get the old behavior of
``input()``, use ``eval(input())``.
* ``xrange()`` renamed to ``range()``.
* PEP 3113: Tuple parameter unpacking removed. You can no longer write
``def foo(a, (b, c)): ...``. Use ``def foo(a, b_c): b, c = b_c``
instead.
* PEP 3114: ``.next()`` renamed to ``.__next__()``, new builtin
``next()`` to call the ``__next__()`` method on an object.
* PEP 3127: New octal literals; binary literals and ``bin()``.
Instead of ``0666``, you write ``0o666``. The oct() function is
modified accordingly. Also, ``0b1010`` equals 10, and ``bin(10)``
returns ``"0b1010"``. ``0666`` is now a ``SyntaxError``.
* PEP 3132: Extended Iterable Unpacking. You can now write things
like ``a, b, *rest = some_sequence``. And even ``*rest, a =
stuff``. The ``rest`` object is always a list; the right-hand
side may be any iterable.
* PEP 3135: New ``super()``. You can now invoke ``super()`` without
arguments and the right class and instance will automatically be
chosen. With arguments, its behavior is unchanged.
* ``zip()``, ``map()`` and ``filter()`` return iterators.
* ``string.letters`` and its friends (``.lowercase`` and
``.uppercase``) are gone. Use ``string.ascii_letters``
etc. instead.
* Removed: ``apply()``, ``callable()``, ``coerce()``, ``execfile()``,
``file()``, ``reduce()``, ``reload()``.
* Removed: ``dict.has_key()``.
* ``exec`` is now a function.
.. ======================================================================
Optimizations
-------------
* Detailed changes are listed here.
The net result of the 3.0 generalizations is that Python 3.0 runs the
pystone benchmark around 33% slower than Python 2.5. There's room for
improvement; we expect to be optimizing string and integer operations
significantly before the final 3.0 release!
.. ======================================================================
New, Improved, and Deprecated Modules
=====================================
As usual, Python's standard library received a number of enhancements
and bug fixes. Here's a partial list of the most notable changes,
sorted alphabetically by module name. Consult the :file:`Misc/NEWS`
file in the source tree for a more complete list of changes, or look
through the Subversion logs for all the details.
* The ``cPickle`` module is gone. Use ``pickle`` instead. Eventually
we'll have a transparent accelerator module.
.. ======================================================================
.. whole new modules get described in subsections here
.. ======================================================================
Build and C API Changes
=======================
Changes to Python's build process and to the C API include:
* PEP 3118: New Buffer API.
* PEP 3121: Extension Module Initialization & Finalization.
* PEP 3123: Making ``PyObject_HEAD`` conform to standard C.
.. ======================================================================
Port-Specific Changes
---------------------
Platform-specific changes go here.
.. ======================================================================
.. _section-other:
Other Changes and Fixes
=======================
As usual, there were a bunch of other improvements and bugfixes
scattered throughout the source tree. A search through the change
logs finds there were XXX patches applied and YYY bugs fixed between
Python 2.6 and 3.0. Both figures are likely to be underestimates.
Some of the more notable changes are:
* Details go here.
.. ======================================================================
Porting to Python 3.0
=====================
This section lists previously described changes that may require
changes to your code:
* Everything is all in the details!
* Developers can include :file:`intobject.h` after :file:`Python.h` for
some ``PyInt_`` aliases.
.. ======================================================================
.. _acks:
Acknowledgements
================
The author would like to thank the following people for offering
suggestions, corrections and assistance with various drafts of this
article: Georg Brandl.
|