3.1.rst 21.5 KB
Newer Older
1
****************************
2
  What's New In Python 3.1
3 4
****************************

5
:Author: Raymond Hettinger
Benjamin Peterson's avatar
Benjamin Peterson committed
6 7
:Release: |release|
:Date: |today|
8 9 10

.. $Id$
   Rules for maintenance:
11

12 13 14
   * 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.
15

16 17
   * The maintainer will go through Misc/NEWS periodically and add
   changes; it's therefore more important to add your changes to
18
   Misc/NEWS than to this file.
19

20 21 22 23 24
   * 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.)
25

26 27 28
   * If you want to draw your new text to the attention of the
   maintainer, add 'XXX' to the beginning of the paragraph or
   section.
29

30 31 32 33
   * 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.
34

35 36
   * You can comment out your additions if you like, but it's not
   necessary (especially when a final release is some months away).
37

38
   * Credit the author of a patch or bugfix.   Just the name is
39
   sufficient; the e-mail address isn't necessary.
40

41
   * It's helpful to add the bug/patch number as a comment:
42

43 44 45 46
   % Patch 12345
   XXX Describe the transmogrify() function added to the socket
   module.
   (Contributed by P.Y. Developer.)
47

48
   This saves the maintainer the effort of going through the SVN log
49
   when researching a change.
50 51 52 53

This article explains the new features in Python 3.1, compared to 3.0.


54 55 56 57 58 59
PEP 372: Ordered Dictionaries
=============================

Regular Python dictionaries iterate over key/value pairs in arbitrary order.
Over the years, a number of authors have written alternative implementations
that remember the order that the keys were originally inserted.  Based on
Raymond Hettinger's avatar
Raymond Hettinger committed
60 61
the experiences from those implementations, a new
:class:`collections.OrderedDict` class has been introduced.
62 63 64 65 66 67 68 69

The OrderedDict API is substantially the same as regular dictionaries
but will iterate over keys and values in a guaranteed order depending on
when a key was first inserted.  If a new entry overwrites an existing entry,
the original insertion position is left unchanged.  Deleting an entry and
reinserting it will move it to the end.

The standard library now supports use of ordered dictionaries in several
70
modules.  The :mod:`configparser` module uses them by default.  This lets
71
configuration files be read, modified, and then written back in their original
Raymond Hettinger's avatar
Raymond Hettinger committed
72
order.  The *_asdict()* method for :func:`collections.namedtuple` now
73 74 75
returns an ordered dictionary with the values appearing in the same order as
the underlying tuple indicies.  The :mod:`json` module is being built-out with
an *object_pairs_hook* to allow OrderedDicts to be built by the decoder.
Raymond Hettinger's avatar
Raymond Hettinger committed
76
Support was also added for third-party tools like `PyYAML <http://pyyaml.org/>`_.
77 78 79 80

.. seealso::

   :pep:`372` - Ordered Dictionaries
81 82
      PEP written by Armin Ronacher and Raymond Hettinger.  Implementation
      written by Raymond Hettinger.
83

84

85 86 87
PEP 378: Format Specifier for Thousands Separator
=================================================

88
The built-in :func:`format` function and the :meth:`str.format` method use
89 90 91 92
a mini-language that now includes a simple, non-locale aware way to format
a number with a thousands separator.  That provides a way to humanize a
program's output, improving its professional appearance and readability::

Raymond Hettinger's avatar
Raymond Hettinger committed
93 94 95 96
    >>> format(1234567, ',d')
    '1,234,567'
    >>> format(1234567.89, ',.2f')
    '1,234,567.89'
97 98
    >>> format(12345.6 + 8901234.12j, ',f')
    '12,345.600000+8,901,234.120000j'
99 100 101
    >>> format(Decimal('1234567.89'), ',f')
    '1,234,567.89'

102 103
The supported types are :class:`int`, :class:`float`, :class:`complex`
and :class:`decimal.Decimal`.
104

105
Discussions are underway about how to specify alternative separators
106 107 108
like dots, spaces, apostrophes, or underscores.  Locale-aware applications
should use the existing *n* format specifier which already has some support
for thousands separators.
109 110 111 112

.. seealso::

   :pep:`378` - Format Specifier for Thousands Separator
Raymond Hettinger's avatar
Raymond Hettinger committed
113
      PEP written by Raymond Hettinger and implemented by Eric Smith and
114 115 116
      Mark Dickinson.


117 118 119 120 121
Other Language Changes
======================

Some smaller changes made to the core Python language are:

122 123 124 125 126 127
* Directories and zip archives containing a :file:`__main__.py`
  file can now be executed directly by passing their name to the
  interpreter. The directory/zipfile is automatically inserted as the
  first entry in sys.path.  (Suggestion and initial patch by Andy Chu;
  revised patch by Phillip J. Eby and Nick Coghlan; :issue:`1739468`.)

128 129 130 131 132 133 134 135 136 137 138 139 140 141
* The :func:`int` type gained a ``bit_length`` method that returns the
  number of bits necessary to represent its argument in binary::

      >>> n = 37
      >>> bin(37)
      '0b100101'
      >>> n.bit_length()
      6
      >>> n = 2**123-1
      >>> n.bit_length()
      123
      >>> (n+1).bit_length()
      124

142 143
  (Contributed by Fredrik Johansson, Victor Stinner, Raymond Hettinger,
  and Mark Dickinson; :issue:`3439`.)
144

145 146 147 148 149 150 151 152 153 154 155
* The fields in :func:`format` strings can now be automatically
  numbered::

    >>> 'Sir {} of {}'.format('Gallahad', 'Camelot')
    'Sir Gallahad of Camelot'

  Formerly, the string would have required numbered fields such as:
  ``'Sir {0} of {1}'``.

  (Contributed by Eric Smith; :issue:`5237`.)

Raymond Hettinger's avatar
Raymond Hettinger committed
156 157 158 159 160 161 162 163 164
* The :func:`string.maketrans` function is deprecated and is replaced by new
  static methods, :meth:`bytes.maketrans` and :meth:`bytearray.maketrans`.
  This change solves the confusion around which types were supported by the
  :mod:`string` module. Now, :class:`str`, :class:`bytes`, and
  :class:`bytearray` each have their own **maketrans** and **translate**
  methods with intermediate translation tables of the appropriate type.

  (Contributed by Georg Brandl; :issue:`5675`.)

165 166 167 168 169 170 171 172
* The syntax of the :keyword:`with` statement now allows multiple context
  managers in a single statement::

    >>> with open('mylog.txt') as infile, open('a.out', 'w') as outfile:
    ...     for line in infile:
    ...         if '<critical>' in line:
    ...             outfile.write(line)

173
  With the new syntax, the :func:`contextlib.nested` function is no longer
Raymond Hettinger's avatar
Raymond Hettinger committed
174
  needed and is now deprecated.
175

176
  (Contributed by Georg Brandl and Mattias Brändström;
177 178
  `appspot issue 53094 <http://codereview.appspot.com/53094>`_.)

179 180 181 182 183 184 185 186
* ``round(x, n)`` now returns an integer if *x* is an integer.
  Previously it returned a float::

    >>> round(1123, -2)
    1100

  (Contributed by Mark Dickinson; :issue:`4707`.)

187 188
* Python now uses David Gay's algorithm for finding the shortest floating
  point representation that doesn't change its value.  This should help
Eric Smith's avatar
Eric Smith committed
189
  mitigate some of the confusion surrounding binary floating point
190 191 192 193
  numbers.

  The significance is easily seen with a number like ``1.1`` which does not
  have an exact equivalent in binary floating point.  Since there is no exact
Raymond Hettinger's avatar
Raymond Hettinger committed
194
  equivalent, an expression like ``float('1.1')`` evaluates to the nearest
195 196 197 198 199 200 201
  representable value which is ``0x1.199999999999ap+0`` in hex or
  ``1.100000000000000088817841970012523233890533447265625`` in decimal. That
  nearest value was and still is used in subsequent floating point
  calculations.

  What is new is how the number gets displayed.  Formerly, Python used a
  simple approach.  The value of ``repr(1.1)`` was computed as ``format(1.1,
Raymond Hettinger's avatar
Raymond Hettinger committed
202
  '.17g')`` which evaluated to ``'1.1000000000000001'``. The advantage of
203 204 205 206 207 208
  using 17 digits was that it relied on IEEE-754 guarantees to assure that
  ``eval(repr(1.1))`` would round-trip exactly to its original value.  The
  disadvantage is that many people found the output to be confusing (mistaking
  intrinsic limitations of binary floating point representation as being a
  problem with Python itself).

Raymond Hettinger's avatar
Raymond Hettinger committed
209
  The new algorithm for ``repr(1.1)`` is smarter and returns ``'1.1'``.
210
  Effectively, it searches all equivalent string representations (ones that
Raymond Hettinger's avatar
Raymond Hettinger committed
211
  get stored with the same underlying float value) and returns the shortest
212 213 214 215 216 217 218 219 220 221 222 223
  representation.

  The new algorithm tends to emit cleaner representations when possible, but
  it does not change the underlying values.  So, it is still the case that
  ``1.1 + 2.2 != 3.3`` even though the representations may suggest otherwise.

  The new algorithm depends on certain features in the underlying floating
  point implementation.  If the required features are not found, the old
  algorithm will continue to be used.  Also, the text pickle protocols
  assure cross-platform portability by using the old algorithm.

  (Contributed by Eric Smith and Mark Dickinson; :issue:`1580`)
224 225 226 227

New, Improved, and Deprecated Modules
=====================================

228 229 230 231 232 233 234 235
* Added a :class:`collections.Counter` class to support convenient
  counting of unique items in a sequence or iterable::

      >>> Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
      Counter({'blue': 3, 'red': 2, 'green': 1})

  (Contributed by Raymond Hettinger; :issue:`1696199`.)

236
* Added a new module, :mod:`tkinter.ttk` for access to the Tk themed widget set.
237
  The basic idea of ttk is to separate, to the extent possible, the code
238 239
  implementing a widget's behavior from the code implementing its appearance.

240
  (Contributed by Guilherme Polo; :issue:`2983`.)
241

242 243
* The :class:`gzip.GzipFile` and :class:`bz2.BZ2File` classes now support
  the context manager protocol::
244

245 246 247 248 249
        >>> # Automatically close file after writing
        >>> with gzip.GzipFile(filename, "wb") as f:
        ...     f.write(b"xxx")

  (Contributed by Antoine Pitrou.)
250

Raymond Hettinger's avatar
Raymond Hettinger committed
251
* The :mod:`decimal` module now supports methods for creating a
Raymond Hettinger's avatar
Raymond Hettinger committed
252
  decimal object from a binary :class:`float`.  The conversion is
253 254 255 256 257 258 259 260 261 262 263
  exact but can sometimes be surprising::

      >>> Decimal.from_float(1.1)
      Decimal('1.100000000000000088817841970012523233890533447265625')

  The long decimal result shows the actual binary fraction being
  stored for *1.1*.  The fraction has many digits because *1.1* cannot
  be exactly represented in binary.

  (Contributed by Raymond Hettinger and Mark Dickinson.)

264 265 266 267 268 269 270
* The :mod:`itertools` module grew two new functions.  The
  :func:`itertools.combinations_with_replacement` function is one of
  four for generating combinatorics including permutations and Cartesian
  products.  The :func:`itertools.compress` function mimics its namesake
  from APL.  Also, the existing :func:`itertools.count` function now has
  an optional *step* argument and can accept any type of counting
  sequence including :class:`fractions.Fraction` and
Raymond Hettinger's avatar
Raymond Hettinger committed
271 272 273 274 275 276 277 278 279
  :class:`decimal.Decimal`::

    >>> [p+q for p,q in combinations_with_replacement('LOVE', 2)]
    ['LL', 'LO', 'LV', 'LE', 'OO', 'OV', 'OE', 'VV', 'VE', 'EE']

    >>> list(compress(data=range(10), selectors=[0,0,1,1,0,1,0,1,0,0]))
    [2, 3, 5, 7]

    >>> c = count(start=Fraction(1,2), step=Fraction(1,6))
Raymond Hettinger's avatar
Raymond Hettinger committed
280 281
    >>> [next(c), next(c), next(c), next(c)]
    [Fraction(1, 2), Fraction(2, 3), Fraction(5, 6), Fraction(1, 1)]
282 283 284

  (Contributed by Raymond Hettinger.)

285 286 287 288
* :func:`collections.namedtuple` now supports a keyword argument
  *rename* which lets invalid fieldnames be automatically converted to
  positional names in the form _0, _1, etc.  This is useful when
  the field names are being created by an external source such as a
289 290
  CSV header, SQL field list, or user input::

Raymond Hettinger's avatar
Raymond Hettinger committed
291 292
    >>> query = input()
    SELECT region, dept, count(*) FROM main GROUPBY region, dept
293 294 295 296 297 298 299 300

    >>> cursor.execute(query)
    >>> query_fields = [desc[0] for desc in cursor.description]
    >>> UserQuery = namedtuple('UserQuery', query_fields, rename=True)
    >>> pprint.pprint([UserQuery(*row) for row in cursor])
    [UserQuery(region='South', dept='Shipping', _2=185),
     UserQuery(region='North', dept='Accounting', _2=37),
     UserQuery(region='West', dept='Sales', _2=419)]
301 302 303 304 305 306 307 308

  (Contributed by Raymond Hettinger; :issue:`1818`.)

* The :func:`re.sub`, :func:`re.subn` and :func:`re.split` functions now
  accept a flags parameter.

  (Contributed by Gregory Smith.)

Raymond Hettinger's avatar
Raymond Hettinger committed
309
* The :mod:`logging` module now implements a simple :class:`logging.NullHandler`
310 311
  class for applications that are not using logging but are calling
  library code that does.  Setting-up a null handler will suppress
Raymond Hettinger's avatar
Raymond Hettinger committed
312
  spurious warnings such as "No handlers could be found for logger foo"::
313 314 315 316

    >>> h = logging.NullHandler()
    >>> logging.getLogger("foo").addHandler(h)

Raymond Hettinger's avatar
Raymond Hettinger committed
317
  (Contributed by Vinay Sajip; :issue:`4384`).
318

319 320 321 322 323 324 325 326 327 328 329 330 331 332
* The :mod:`runpy` module which supports the ``-m`` command line switch
  now supports the execution of packages by looking for and executing
  a ``__main__`` submodule when a package name is supplied.

  (Contributed by Andi Vajda; :issue:`4195`.)

* The :mod:`pdb` module can now access and display source code loaded via
  :mod:`zipimport` (or any other conformant :pep:`302` loader).

  (Contributed by Alexander Belopolsky; :issue:`4201`.)

*  :class:`functools.partial` objects can now be pickled.

  (Suggested by Antoine Pitrou and Jesse Noller.  Implemented by
Georg Brandl's avatar
Georg Brandl committed
333
  Jack Diederich; :issue:`5228`.)
334

335 336 337 338 339
* Add :mod:`pydoc` help topics for symbols so that ``help('@')``
  works as expected in the interactive environment.

  (Contributed by David Laban; :issue:`4739`.)

340 341
* The :mod:`unittest` module now supports skipping individual tests or classes
  of tests. And it supports marking a test as a expected failure, a test that
Raymond Hettinger's avatar
Raymond Hettinger committed
342
  is known to be broken, but shouldn't be counted as a failure on a
Raymond Hettinger's avatar
Raymond Hettinger committed
343 344 345 346 347 348 349 350 351 352 353
  TestResult::

    class TestGizmo(unittest.TestCase):

        @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
        def test_gizmo_on_windows(self):
            ...

        @unittest.expectedFailure
        def test_gimzo_without_required_library(self):
            ...
354

Raymond Hettinger's avatar
Raymond Hettinger committed
355 356
  Also, tests for exceptions have been builtout to work with context managers
  using the :keyword:`with` statement::
357 358 359 360 361 362 363 364 365 366

      def test_division_by_zero(self):
          with self.assertRaises(ZeroDivisionError):
              x / 0

  In addition, several new assertion methods were added including
  :func:`assertSetEqual`, :func:`assertDictEqual`,
  :func:`assertDictContainsSubset`, :func:`assertListEqual`,
  :func:`assertTupleEqual`, :func:`assertSequenceEqual`,
  :func:`assertRaisesRegexp`, :func:`assertIsNone`,
367
  and :func:`assertIsNotNone`.
368 369 370

  (Contributed by Benjamin Peterson and Antoine Pitrou.)

Raymond Hettinger's avatar
Raymond Hettinger committed
371
* The :mod:`io` module has three new constants for the :meth:`seek`
372 373 374 375 376 377 378 379
  method :data:`SEEK_SET`, :data:`SEEK_CUR`, and :data:`SEEK_END`.

* The :attr:`sys.version_info` tuple is now a named tuple::

    >>> sys.version_info
    sys.version_info(major=3, minor=1, micro=0, releaselevel='alpha', serial=2)

  (Contributed by Ross Light; :issue:`4285`.)
380

381
* The :mod:`nntplib` and :mod:`imaplib` modules now support IPv6.
382

383 384
  (Contributed by Derek Morr; :issue:`1655` and :issue:`1664`.)

385 386 387 388
* The :mod:`pickle` module has been adapted for better interoperability with
  Python 2.x when used with protocol 2 or lower.  The reorganization of the
  standard library changed the formal reference for many objects.  For
  example, ``__builtin__.set`` in Python 2 is called ``builtins.set`` in Python
Raymond Hettinger's avatar
Raymond Hettinger committed
389
  3. This change confounded efforts to share data between different versions of
390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408
  Python.  But now when protocol 2 or lower is selected, the pickler will
  automatically use the old Python 2 names for both loading and dumping. This
  remapping is turned-on by default but can be disabled with the *fix_imports*
  option::

    >>> s = {1, 2, 3}
    >>> pickle.dumps(s, protocol=0)
    b'c__builtin__\nset\np0\n((lp1\nL1L\naL2L\naL3L\natp2\nRp3\n.'
    >>> pickle.dumps(s, protocol=0, fix_imports=False)
    b'cbuiltins\nset\np0\n((lp1\nL1L\naL2L\naL3L\natp2\nRp3\n.'

  An unfortunate but unavoidable side-effect of this change is that protocol 2
  pickles produced by Python 3.1 won't be readable with Python 3.0. The latest
  pickle protocol, protocol 3, should be used when migrating data between
  Python 3.x implementations, as it doesn't attempt to remain compatible with
  Python 2.x.

  (Contributed by Alexandre Vassalotti and Antoine Pitrou, :issue:`6137`.)

409 410 411 412 413 414 415
* A new module, :mod:`importlib` was added.  It provides a complete, portable,
  pure Python reference implementation of the :keyword:`import` statement and its
  counterpart, the :func:`__import__` function.  It represents a substantial
  step forward in documenting and defining the actions that take place during
  imports.

  (Contributed by Brett Cannon.)
416 417

Optimizations
418
=============
419 420 421 422 423 424 425 426 427 428 429 430

Major performance enhancements have been added:

* The new I/O library (as defined in :pep:`3116`) was mostly written in
  Python and quickly proved to be a problematic bottleneck in Python 3.0.
  In Python 3.1, the I/O library has been entirely rewritten in C and is
  2 to 20 times faster depending on the task at hand. The pure Python
  version is still available for experimentation purposes through
  the ``_pyio`` module.

  (Contributed by Amaury Forgeot d'Arc and Antoine Pitrou.)

Raymond Hettinger's avatar
Raymond Hettinger committed
431
* Added a heuristic so that tuples and dicts containing only untrackable objects
432 433 434 435 436 437
  are not tracked by the garbage collector. This can reduce the size of
  collections and therefore the garbage collection overhead on long-running
  programs, depending on their particular use of datatypes.

  (Contributed by Antoine Pitrou, :issue:`4688`.)

438 439 440
* Enabling a configure option named ``--with-computed-gotos``
  on compilers that support it (notably: gcc, SunPro, icc), the bytecode
  evaluation loop is compiled with a new dispatch mechanism which gives
441 442
  speedups of up to 20%, depending on the system, the compiler, and
  the benchmark.
443

444 445
  (Contributed by Antoine Pitrou along with a number of other participants,
  :issue:`4753`).
446 447 448 449 450 451

* The decoding of UTF-8, UTF-16 and LATIN-1 is now two to four times
  faster.

  (Contributed by Antoine Pitrou and Amaury Forgeot d'Arc, :issue:`4868`.)

Raymond Hettinger's avatar
Raymond Hettinger committed
452
* The :mod:`json` module now has a C extension to substantially improve
453 454
  its performance.  In addition, the API was modified so that json works
  only with :class:`str`, not with :class:`bytes`.  That change makes the
Raymond Hettinger's avatar
Raymond Hettinger committed
455
  module closely match the `JSON specification <http://json.org/>`_
456
  which is defined in terms of Unicode.
457

458 459 460 461 462
  (Contributed by Bob Ippolito and converted to Py3.1 by Antoine Pitrou
  and Benjamin Peterson; :issue:`4136`.)

* Unpickling now interns the attribute names of pickled objects.  This saves
  memory and allows pickles to be smaller.
463

464
  (Contributed by Jake McGuire and Antoine Pitrou; :issue:`5084`.)
465

466 467 468 469 470 471 472 473
IDLE
====

* IDLE's format menu now provides an option to strip trailing whitespace
  from a source file.

  (Contributed by Roger D. Serwy; :issue:`5150`.)

474 475 476 477
Build and C API Changes
=======================

Changes to Python's build process and to the C API include:
478 479 480 481 482 483 484 485 486 487 488 489

* Integers are now stored internally either in base 2**15 or in base
  2**30, the base being determined at build time.  Previously, they
  were always stored in base 2**15.  Using base 2**30 gives
  significant performance improvements on 64-bit machines, but
  benchmark results on 32-bit machines have been mixed.  Therefore,
  the default is to use base 2**30 on 64-bit machines and base 2**15
  on 32-bit machines; on Unix, there's a new configure option
  ``--enable-big-digits`` that can be used to override this default.

  Apart from the performance improvements this change should be invisible to
  end users, with one exception: for testing and debugging purposes there's a
490
  new :attr:`sys.int_info` that provides information about the
491 492 493 494 495 496 497 498
  internal format, giving the number of bits per digit and the size in bytes
  of the C type used to store each digit::

     >>> import sys
     >>> sys.int_info
     sys.int_info(bits_per_digit=30, sizeof_digit=4)

  (Contributed by Mark Dickinson; :issue:`4258`.)
499

500
* The :c:func:`PyLong_AsUnsignedLongLong()` function now handles a negative
501 502 503 504
  *pylong* by raising :exc:`OverflowError` instead of :exc:`TypeError`.

  (Contributed by Mark Dickinson and Lisandro Dalcrin; :issue:`5175`.)

505
* Deprecated :c:func:`PyNumber_Int`.  Use :c:func:`PyNumber_Long` instead.
506

Raymond Hettinger's avatar
Raymond Hettinger committed
507
  (Contributed by Mark Dickinson; :issue:`4910`.)
Raymond Hettinger's avatar
Raymond Hettinger committed
508

509 510
* Added a new :c:func:`PyOS_string_to_double` function to replace the
  deprecated functions :c:func:`PyOS_ascii_strtod` and :c:func:`PyOS_ascii_atof`.
Raymond Hettinger's avatar
Raymond Hettinger committed
511 512 513

  (Contributed by Mark Dickinson; :issue:`5914`.)

514
* Added :c:type:`PyCapsule` as a replacement for the :c:type:`PyCObject` API.
515 516
  The principal difference is that the new type has a well defined interface
  for passing typing safety information and a less complicated signature
517 518
  for calling a destructor.  The old type had a problematic API and is now
  deprecated.
519 520 521

  (Contributed by Larry Hastings; :issue:`5630`.)

Raymond Hettinger's avatar
Raymond Hettinger committed
522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549
Porting to Python 3.1
=====================

This section lists previously described changes and other bugfixes
that may require changes to your code:

* The new floating point string representations can break existing doctests.
  For example::

    def e():
        '''Compute the base of natural logarithms.

        >>> e()
        2.7182818284590451

        '''
        return sum(1/math.factorial(x) for x in reversed(range(30)))

    doctest.testmod()

    **********************************************************************
    Failed example:
        e()
    Expected:
        2.7182818284590451
    Got:
        2.718281828459045
    **********************************************************************
550 551 552 553 554

* The automatic name remapping in the pickle module for protocol 2 or lower can
  make Python 3.1 pickles unreadable in Python 3.0.  One solution is to use
  protocol 3.  Another solution is to set the *fix_imports* option to **False**.
  See the discussion above for more details.