553 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			553 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| ****************************
 | |
|   What's New In Python 3.1
 | |
| ****************************
 | |
| 
 | |
| :Author: Raymond Hettinger
 | |
| 
 | |
| .. $Id$
 | |
|    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.1, compared to 3.0.
 | |
| 
 | |
| 
 | |
| 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
 | |
| the experiences from those implementations, a new
 | |
| :class:`collections.OrderedDict` class has been introduced.
 | |
| 
 | |
| 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
 | |
| modules.  The :mod:`configparser` module uses them by default.  This lets
 | |
| configuration files be read, modified, and then written back in their original
 | |
| order.  The *_asdict()* method for :func:`collections.namedtuple` now
 | |
| returns an ordered dictionary with the values appearing in the same order as
 | |
| the underlying tuple indices.  The :mod:`json` module is being built-out with
 | |
| an *object_pairs_hook* to allow OrderedDicts to be built by the decoder.
 | |
| Support was also added for third-party tools like `PyYAML <http://pyyaml.org/>`_.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`372` - Ordered Dictionaries
 | |
|       PEP written by Armin Ronacher and Raymond Hettinger.  Implementation
 | |
|       written by Raymond Hettinger.
 | |
| 
 | |
| 
 | |
| PEP 378: Format Specifier for Thousands Separator
 | |
| =================================================
 | |
| 
 | |
| The built-in :func:`format` function and the :meth:`str.format` method use
 | |
| 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::
 | |
| 
 | |
|     >>> format(1234567, ',d')
 | |
|     '1,234,567'
 | |
|     >>> format(1234567.89, ',.2f')
 | |
|     '1,234,567.89'
 | |
|     >>> format(12345.6 + 8901234.12j, ',f')
 | |
|     '12,345.600000+8,901,234.120000j'
 | |
|     >>> format(Decimal('1234567.89'), ',f')
 | |
|     '1,234,567.89'
 | |
| 
 | |
| The supported types are :class:`int`, :class:`float`, :class:`complex`
 | |
| and :class:`decimal.Decimal`.
 | |
| 
 | |
| Discussions are underway about how to specify alternative separators
 | |
| like dots, spaces, apostrophes, or underscores.  Locale-aware applications
 | |
| should use the existing *n* format specifier which already has some support
 | |
| for thousands separators.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`378` - Format Specifier for Thousands Separator
 | |
|       PEP written by Raymond Hettinger and implemented by Eric Smith and
 | |
|       Mark Dickinson.
 | |
| 
 | |
| 
 | |
| Other Language Changes
 | |
| ======================
 | |
| 
 | |
| Some smaller changes made to the core Python language are:
 | |
| 
 | |
| * 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`.)
 | |
| 
 | |
| * 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
 | |
| 
 | |
|   (Contributed by Fredrik Johansson, Victor Stinner, Raymond Hettinger,
 | |
|   and Mark Dickinson; :issue:`3439`.)
 | |
| 
 | |
| * 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`.)
 | |
| 
 | |
| * 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`.)
 | |
| 
 | |
| * 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)
 | |
| 
 | |
|   With the new syntax, the :func:`contextlib.nested` function is no longer
 | |
|   needed and is now deprecated.
 | |
| 
 | |
|   (Contributed by Georg Brandl and Mattias Brändström;
 | |
|   `appspot issue 53094 <https://codereview.appspot.com/53094>`_.)
 | |
| 
 | |
| * ``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`.)
 | |
| 
 | |
| * Python now uses David Gay's algorithm for finding the shortest floating
 | |
|   point representation that doesn't change its value.  This should help
 | |
|   mitigate some of the confusion surrounding binary floating point
 | |
|   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
 | |
|   equivalent, an expression like ``float('1.1')`` evaluates to the nearest
 | |
|   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,
 | |
|   '.17g')`` which evaluated to ``'1.1000000000000001'``. The advantage of
 | |
|   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).
 | |
| 
 | |
|   The new algorithm for ``repr(1.1)`` is smarter and returns ``'1.1'``.
 | |
|   Effectively, it searches all equivalent string representations (ones that
 | |
|   get stored with the same underlying float value) and returns the shortest
 | |
|   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`)
 | |
| 
 | |
| New, Improved, and Deprecated Modules
 | |
| =====================================
 | |
| 
 | |
| * 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`.)
 | |
| 
 | |
| * Added a new module, :mod:`tkinter.ttk` for access to the Tk themed widget set.
 | |
|   The basic idea of ttk is to separate, to the extent possible, the code
 | |
|   implementing a widget's behavior from the code implementing its appearance.
 | |
| 
 | |
|   (Contributed by Guilherme Polo; :issue:`2983`.)
 | |
| 
 | |
| * The :class:`gzip.GzipFile` and :class:`bz2.BZ2File` classes now support
 | |
|   the context management protocol::
 | |
| 
 | |
|         >>> # Automatically close file after writing
 | |
|         >>> with gzip.GzipFile(filename, "wb") as f:
 | |
|         ...     f.write(b"xxx")
 | |
| 
 | |
|   (Contributed by Antoine Pitrou.)
 | |
| 
 | |
| * The :mod:`decimal` module now supports methods for creating a
 | |
|   decimal object from a binary :class:`float`.  The conversion is
 | |
|   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.)
 | |
| 
 | |
| * 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
 | |
|   :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))
 | |
|     >>> [next(c), next(c), next(c), next(c)]
 | |
|     [Fraction(1, 2), Fraction(2, 3), Fraction(5, 6), Fraction(1, 1)]
 | |
| 
 | |
|   (Contributed by Raymond Hettinger.)
 | |
| 
 | |
| * :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
 | |
|   CSV header, SQL field list, or user input::
 | |
| 
 | |
|     >>> query = input()
 | |
|     SELECT region, dept, count(*) FROM main GROUPBY region, dept
 | |
| 
 | |
|     >>> 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)]
 | |
| 
 | |
|   (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.)
 | |
| 
 | |
| * The :mod:`logging` module now implements a simple :class:`logging.NullHandler`
 | |
|   class for applications that are not using logging but are calling
 | |
|   library code that does.  Setting-up a null handler will suppress
 | |
|   spurious warnings such as "No handlers could be found for logger foo"::
 | |
| 
 | |
|     >>> h = logging.NullHandler()
 | |
|     >>> logging.getLogger("foo").addHandler(h)
 | |
| 
 | |
|   (Contributed by Vinay Sajip; :issue:`4384`).
 | |
| 
 | |
| * 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
 | |
|   Jack Diederich; :issue:`5228`.)
 | |
| 
 | |
| * Add :mod:`pydoc` help topics for symbols so that ``help('@')``
 | |
|   works as expected in the interactive environment.
 | |
| 
 | |
|   (Contributed by David Laban; :issue:`4739`.)
 | |
| 
 | |
| * The :mod:`unittest` module now supports skipping individual tests or classes
 | |
|   of tests. And it supports marking a test as an expected failure, a test that
 | |
|   is known to be broken, but shouldn't be counted as a failure on a
 | |
|   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):
 | |
|             ...
 | |
| 
 | |
|   Also, tests for exceptions have been builtout to work with context managers
 | |
|   using the :keyword:`with` statement::
 | |
| 
 | |
|       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`,
 | |
|   and :func:`assertIsNotNone`.
 | |
| 
 | |
|   (Contributed by Benjamin Peterson and Antoine Pitrou.)
 | |
| 
 | |
| * The :mod:`io` module has three new constants for the :meth:`seek`
 | |
|   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`.)
 | |
| 
 | |
| * The :mod:`nntplib` and :mod:`imaplib` modules now support IPv6.
 | |
| 
 | |
|   (Contributed by Derek Morr; :issue:`1655` and :issue:`1664`.)
 | |
| 
 | |
| * 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
 | |
|   3. This change confounded efforts to share data between different versions of
 | |
|   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`.)
 | |
| 
 | |
| * 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.)
 | |
| 
 | |
| Optimizations
 | |
| =============
 | |
| 
 | |
| 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.)
 | |
| 
 | |
| * Added a heuristic so that tuples and dicts containing only untrackable objects
 | |
|   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`.)
 | |
| 
 | |
| * 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
 | |
|   speedups of up to 20%, depending on the system, the compiler, and
 | |
|   the benchmark.
 | |
| 
 | |
|   (Contributed by Antoine Pitrou along with a number of other participants,
 | |
|   :issue:`4753`).
 | |
| 
 | |
| * 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`.)
 | |
| 
 | |
| * The :mod:`json` module now has a C extension to substantially improve
 | |
|   its performance.  In addition, the API was modified so that json works
 | |
|   only with :class:`str`, not with :class:`bytes`.  That change makes the
 | |
|   module closely match the `JSON specification <http://json.org/>`_
 | |
|   which is defined in terms of Unicode.
 | |
| 
 | |
|   (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.
 | |
| 
 | |
|   (Contributed by Jake McGuire and Antoine Pitrou; :issue:`5084`.)
 | |
| 
 | |
| IDLE
 | |
| ====
 | |
| 
 | |
| * IDLE's format menu now provides an option to strip trailing whitespace
 | |
|   from a source file.
 | |
| 
 | |
|   (Contributed by Roger D. Serwy; :issue:`5150`.)
 | |
| 
 | |
| Build and C API Changes
 | |
| =======================
 | |
| 
 | |
| Changes to Python's build process and to the C API include:
 | |
| 
 | |
| * 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
 | |
|   new :attr:`sys.int_info` that provides information about the
 | |
|   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`.)
 | |
| 
 | |
| * The :c:func:`PyLong_AsUnsignedLongLong()` function now handles a negative
 | |
|   *pylong* by raising :exc:`OverflowError` instead of :exc:`TypeError`.
 | |
| 
 | |
|   (Contributed by Mark Dickinson and Lisandro Dalcrin; :issue:`5175`.)
 | |
| 
 | |
| * Deprecated :c:func:`PyNumber_Int`.  Use :c:func:`PyNumber_Long` instead.
 | |
| 
 | |
|   (Contributed by Mark Dickinson; :issue:`4910`.)
 | |
| 
 | |
| * 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`.
 | |
| 
 | |
|   (Contributed by Mark Dickinson; :issue:`5914`.)
 | |
| 
 | |
| * Added :c:type:`PyCapsule` as a replacement for the :c:type:`PyCObject` API.
 | |
|   The principal difference is that the new type has a well defined interface
 | |
|   for passing typing safety information and a less complicated signature
 | |
|   for calling a destructor.  The old type had a problematic API and is now
 | |
|   deprecated.
 | |
| 
 | |
|   (Contributed by Larry Hastings; :issue:`5630`.)
 | |
| 
 | |
| 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
 | |
|     **********************************************************************
 | |
| 
 | |
| * 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.
 |