3316 lines
		
	
	
		
			129 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			3316 lines
		
	
	
		
			129 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. _whats-new-in-2.6:
 | |
| 
 | |
| ****************************
 | |
|   What's New in Python 2.6
 | |
| ****************************
 | |
| 
 | |
| .. XXX add trademark info for Apple, Microsoft, SourceForge.
 | |
| 
 | |
| :Author: A.M. Kuchling (amk at amk.ca)
 | |
| 
 | |
| .. $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 in a parenthetical comment.
 | |
| 
 | |
|    XXX Describe the transmogrify() function added to the socket
 | |
|    module.
 | |
|    (Contributed by P.Y. Developer; :issue:`12345`.)
 | |
| 
 | |
|    This saves the maintainer some effort going through the SVN logs
 | |
|    when researching a change.
 | |
| 
 | |
| This article explains the new features in Python 2.6, released on October 1
 | |
| 2008.  The release schedule is described in :pep:`361`.
 | |
| 
 | |
| The major theme of Python 2.6 is preparing the migration path to
 | |
| Python 3.0, a major redesign of the language.  Whenever possible,
 | |
| Python 2.6 incorporates new features and syntax from 3.0 while
 | |
| remaining compatible with existing code by not removing older features
 | |
| or syntax.  When it's not possible to do that, Python 2.6 tries to do
 | |
| what it can, adding compatibility functions in a
 | |
| :mod:`future_builtins` module and a :option:`!-3` switch to warn about
 | |
| usages that will become unsupported in 3.0.
 | |
| 
 | |
| Some significant new packages have been added to the standard library,
 | |
| such as the :mod:`multiprocessing` and :mod:`json` modules, but
 | |
| there aren't many new features that aren't related to Python 3.0 in
 | |
| some way.
 | |
| 
 | |
| Python 2.6 also sees a number of improvements and bugfixes throughout
 | |
| the source.  A search through the change logs finds there were 259
 | |
| patches applied and 612 bugs fixed between Python 2.5 and 2.6.  Both
 | |
| figures are likely to be underestimates.
 | |
| 
 | |
| 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 2.6. If
 | |
| you want to understand the rationale for the design and
 | |
| implementation, refer to the PEP for a particular new feature.
 | |
| Whenever possible, "What's New in Python" links to the bug/patch item
 | |
| for each change.
 | |
| 
 | |
| .. 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.
 | |
| .. ========================================================================
 | |
| 
 | |
| Python 3.0
 | |
| ================
 | |
| 
 | |
| The development cycle for Python versions 2.6 and 3.0 was
 | |
| synchronized, with the alpha and beta releases for both versions being
 | |
| made on the same days.  The development of 3.0 has influenced many
 | |
| features in 2.6.
 | |
| 
 | |
| Python 3.0 is a far-ranging redesign of Python that breaks
 | |
| compatibility with the 2.x series.  This means that existing Python
 | |
| code will need some conversion in order to run on
 | |
| Python 3.0.  However, not all the changes in 3.0 necessarily break
 | |
| compatibility.  In cases where new features won't cause existing code
 | |
| to break, they've been backported to 2.6 and are described in this
 | |
| document in the appropriate place.  Some of the 3.0-derived features
 | |
| are:
 | |
| 
 | |
| * A :meth:`__complex__` method for converting objects to a complex number.
 | |
| * Alternate syntax for catching exceptions: ``except TypeError as exc``.
 | |
| * The addition of :func:`functools.reduce` as a synonym for the built-in
 | |
|   :func:`reduce` function.
 | |
| 
 | |
| Python 3.0 adds several new built-in functions and changes the
 | |
| semantics of some existing builtins.  Functions that are new in 3.0
 | |
| such as :func:`bin` have simply been added to Python 2.6, but existing
 | |
| builtins haven't been changed; instead, the :mod:`future_builtins`
 | |
| module has versions with the new 3.0 semantics.  Code written to be
 | |
| compatible with 3.0 can do ``from future_builtins import hex, map`` as
 | |
| necessary.
 | |
| 
 | |
| A new command-line switch, :option:`!-3`, enables warnings
 | |
| about features that will be removed in Python 3.0.  You can run code
 | |
| with this switch to see how much work will be necessary to port
 | |
| code to 3.0.  The value of this switch is available
 | |
| to Python code as the boolean variable :data:`sys.py3kwarning`,
 | |
| and to C extension code as :c:data:`Py_Py3kWarningFlag`.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    The 3xxx series of PEPs, which contains proposals for Python 3.0.
 | |
|    :pep:`3000` describes the development process for Python 3.0.
 | |
|    Start with :pep:`3100` that describes the general goals for Python
 | |
|    3.0, and then explore the higher-numbered PEPS that propose
 | |
|    specific features.
 | |
| 
 | |
| 
 | |
| Changes to the Development Process
 | |
| ==================================================
 | |
| 
 | |
| While 2.6 was being developed, the Python development process
 | |
| underwent two significant changes: we switched from SourceForge's
 | |
| issue tracker to a customized Roundup installation, and the
 | |
| documentation was converted from LaTeX to reStructuredText.
 | |
| 
 | |
| 
 | |
| New Issue Tracker: Roundup
 | |
| --------------------------------------------------
 | |
| 
 | |
| For a long time, the Python developers had been growing increasingly
 | |
| annoyed by SourceForge's bug tracker.  SourceForge's hosted solution
 | |
| doesn't permit much customization; for example, it wasn't possible to
 | |
| customize the life cycle of issues.
 | |
| 
 | |
| The infrastructure committee of the Python Software Foundation
 | |
| therefore posted a call for issue trackers, asking volunteers to set
 | |
| up different products and import some of the bugs and patches from
 | |
| SourceForge.  Four different trackers were examined: `Jira
 | |
| <https://www.atlassian.com/software/jira/>`__,
 | |
| `Launchpad <https://launchpad.net/>`__,
 | |
| `Roundup <http://roundup.sourceforge.net/>`__, and
 | |
| `Trac <https://trac.edgewall.org/>`__.
 | |
| The committee eventually settled on Jira
 | |
| and Roundup as the two candidates.  Jira is a commercial product that
 | |
| offers no-cost hosted instances to free-software projects; Roundup
 | |
| is an open-source project that requires volunteers
 | |
| to administer it and a server to host it.
 | |
| 
 | |
| After posting a call for volunteers, a new Roundup installation was
 | |
| set up at https://bugs.python.org.  One installation of Roundup can
 | |
| host multiple trackers, and this server now also hosts issue trackers
 | |
| for Jython and for the Python web site.  It will surely find
 | |
| other uses in the future.  Where possible,
 | |
| this edition of "What's New in Python" links to the bug/patch
 | |
| item for each change.
 | |
| 
 | |
| Hosting of the Python bug tracker is kindly provided by
 | |
| `Upfront Systems <http://www.upfrontsoftware.co.za>`__
 | |
| of Stellenbosch, South Africa.  Martin von Löwis put a
 | |
| lot of effort into importing existing bugs and patches from
 | |
| SourceForge; his scripts for this import operation are at
 | |
| http://svn.python.org/view/tracker/importer/ and may be useful to
 | |
| other projects wishing to move from SourceForge to Roundup.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|   https://bugs.python.org
 | |
|     The Python bug tracker.
 | |
| 
 | |
|   http://bugs.jython.org:
 | |
|     The Jython bug tracker.
 | |
| 
 | |
|   http://roundup.sourceforge.net/
 | |
|     Roundup downloads and documentation.
 | |
| 
 | |
|   http://svn.python.org/view/tracker/importer/
 | |
|     Martin von Löwis's conversion scripts.
 | |
| 
 | |
| New Documentation Format: reStructuredText Using Sphinx
 | |
| -----------------------------------------------------------
 | |
| 
 | |
| The Python documentation was written using LaTeX since the project
 | |
| started around 1989.  In the 1980s and early 1990s, most documentation
 | |
| was printed out for later study, not viewed online. LaTeX was widely
 | |
| used because it provided attractive printed output while remaining
 | |
| straightforward to write once the basic rules of the markup were
 | |
| learned.
 | |
| 
 | |
| Today LaTeX is still used for writing publications destined for
 | |
| printing, but the landscape for programming tools has shifted.  We no
 | |
| longer print out reams of documentation; instead, we browse through it
 | |
| online and HTML has become the most important format to support.
 | |
| Unfortunately, converting LaTeX to HTML is fairly complicated and Fred
 | |
| L. Drake Jr., the long-time Python documentation editor, spent a lot
 | |
| of time maintaining the conversion process.  Occasionally people would
 | |
| suggest converting the documentation into SGML and later XML, but
 | |
| performing a good conversion is a major task and no one ever committed
 | |
| the time required to finish the job.
 | |
| 
 | |
| During the 2.6 development cycle, Georg Brandl put a lot of effort
 | |
| into building a new toolchain for processing the documentation.  The
 | |
| resulting package is called Sphinx, and is available from
 | |
| http://sphinx-doc.org/.
 | |
| 
 | |
| Sphinx concentrates on HTML output, producing attractively styled and
 | |
| modern HTML; printed output is still supported through conversion to
 | |
| LaTeX.  The input format is reStructuredText, a markup syntax
 | |
| supporting custom extensions and directives that is commonly used in
 | |
| the Python community.
 | |
| 
 | |
| Sphinx is a standalone package that can be used for writing, and
 | |
| almost two dozen other projects
 | |
| (`listed on the Sphinx web site <https://www.sphinx-doc.org/en/master/examples.html>`__)
 | |
| have adopted Sphinx as their documentation tool.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    `Documenting Python <https://devguide.python.org/documenting/>`__
 | |
|        Describes how to write for Python's documentation.
 | |
| 
 | |
|    `Sphinx <http://sphinx-doc.org/>`__
 | |
|      Documentation and code for the Sphinx toolchain.
 | |
| 
 | |
|    `Docutils <http://docutils.sourceforge.net>`__
 | |
|      The underlying reStructuredText parser and toolset.
 | |
| 
 | |
| 
 | |
| .. _pep-0343:
 | |
| 
 | |
| PEP 343: The 'with' statement
 | |
| =============================
 | |
| 
 | |
| The previous version, Python 2.5, added the ':keyword:`with`'
 | |
| statement as an optional feature, to be enabled by a ``from __future__
 | |
| import with_statement`` directive.  In 2.6 the statement no longer needs to
 | |
| be specially enabled; this means that :keyword:`!with` is now always a
 | |
| keyword.  The rest of this section is a copy of the corresponding
 | |
| section from the "What's New in Python 2.5" document; if you're
 | |
| familiar with the ':keyword:`!with`' statement
 | |
| from Python 2.5, you can skip this section.
 | |
| 
 | |
| The ':keyword:`with`' statement clarifies code that previously would use
 | |
| ``try...finally`` blocks to ensure that clean-up code is executed.  In this
 | |
| section, I'll discuss the statement as it will commonly be used.  In the next
 | |
| section, I'll examine the implementation details and show how to write objects
 | |
| for use with this statement.
 | |
| 
 | |
| The ':keyword:`with`' statement is a control-flow structure whose basic
 | |
| structure is::
 | |
| 
 | |
|    with expression [as variable]:
 | |
|        with-block
 | |
| 
 | |
| The expression is evaluated, and it should result in an object that supports the
 | |
| context management protocol (that is, has :meth:`__enter__` and :meth:`__exit__`
 | |
| methods).
 | |
| 
 | |
| The object's :meth:`__enter__` is called before *with-block* is executed and
 | |
| therefore can run set-up code. It also may return a value that is bound to the
 | |
| name *variable*, if given.  (Note carefully that *variable* is *not* assigned
 | |
| the result of *expression*.)
 | |
| 
 | |
| After execution of the *with-block* is finished, the object's :meth:`__exit__`
 | |
| method is called, even if the block raised an exception, and can therefore run
 | |
| clean-up code.
 | |
| 
 | |
| Some standard Python objects now support the context management protocol and can
 | |
| be used with the ':keyword:`with`' statement. File objects are one example::
 | |
| 
 | |
|    with open('/etc/passwd', 'r') as f:
 | |
|        for line in f:
 | |
|            print line
 | |
|            ... more processing code ...
 | |
| 
 | |
| After this statement has executed, the file object in *f* will have been
 | |
| automatically closed, even if the :keyword:`for` loop raised an exception
 | |
| part-way through the block.
 | |
| 
 | |
| .. note::
 | |
| 
 | |
|    In this case, *f* is the same object created by :func:`open`, because
 | |
|    :meth:`file.__enter__` returns *self*.
 | |
| 
 | |
| The :mod:`threading` module's locks and condition variables  also support the
 | |
| ':keyword:`with`' statement::
 | |
| 
 | |
|    lock = threading.Lock()
 | |
|    with lock:
 | |
|        # Critical section of code
 | |
|        ...
 | |
| 
 | |
| The lock is acquired before the block is executed and always released once  the
 | |
| block is complete.
 | |
| 
 | |
| The :func:`localcontext` function in the :mod:`decimal` module makes it easy
 | |
| to save and restore the current decimal context, which encapsulates the desired
 | |
| precision and rounding characteristics for computations::
 | |
| 
 | |
|    from decimal import Decimal, Context, localcontext
 | |
| 
 | |
|    # Displays with default precision of 28 digits
 | |
|    v = Decimal('578')
 | |
|    print v.sqrt()
 | |
| 
 | |
|    with localcontext(Context(prec=16)):
 | |
|        # All code in this block uses a precision of 16 digits.
 | |
|        # The original context is restored on exiting the block.
 | |
|        print v.sqrt()
 | |
| 
 | |
| 
 | |
| .. _new-26-context-managers:
 | |
| 
 | |
| Writing Context Managers
 | |
| ------------------------
 | |
| 
 | |
| Under the hood, the ':keyword:`with`' statement is fairly complicated. Most
 | |
| people will only use ':keyword:`!with`' in company with existing objects and
 | |
| don't need to know these details, so you can skip the rest of this section if
 | |
| you like.  Authors of new objects will need to understand the details of the
 | |
| underlying implementation and should keep reading.
 | |
| 
 | |
| A high-level explanation of the context management protocol is:
 | |
| 
 | |
| * The expression is evaluated and should result in an object called a "context
 | |
|   manager".  The context manager must have :meth:`__enter__` and :meth:`__exit__`
 | |
|   methods.
 | |
| 
 | |
| * The context manager's :meth:`__enter__` method is called.  The value returned
 | |
|   is assigned to *VAR*.  If no ``as VAR`` clause is present, the value is simply
 | |
|   discarded.
 | |
| 
 | |
| * The code in *BLOCK* is executed.
 | |
| 
 | |
| * If *BLOCK* raises an exception, the context manager's :meth:`__exit__` method
 | |
|   is called with three arguments, the exception details (``type, value, traceback``,
 | |
|   the same values returned by :func:`sys.exc_info`, which can also be ``None``
 | |
|   if no exception occurred).  The method's return value controls whether an exception
 | |
|   is re-raised: any false value re-raises the exception, and ``True`` will result
 | |
|   in suppressing it.  You'll only rarely want to suppress the exception, because
 | |
|   if you do the author of the code containing the ':keyword:`with`' statement will
 | |
|   never realize anything went wrong.
 | |
| 
 | |
| * If *BLOCK* didn't raise an exception,  the :meth:`__exit__` method is still
 | |
|   called, but *type*, *value*, and *traceback* are all ``None``.
 | |
| 
 | |
| Let's think through an example.  I won't present detailed code but will only
 | |
| sketch the methods necessary for a database that supports transactions.
 | |
| 
 | |
| (For people unfamiliar with database terminology: a set of changes to the
 | |
| database are grouped into a transaction.  Transactions can be either committed,
 | |
| meaning that all the changes are written into the database, or rolled back,
 | |
| meaning that the changes are all discarded and the database is unchanged.  See
 | |
| any database textbook for more information.)
 | |
| 
 | |
| Let's assume there's an object representing a database connection. Our goal will
 | |
| be to let the user write code like this::
 | |
| 
 | |
|    db_connection = DatabaseConnection()
 | |
|    with db_connection as cursor:
 | |
|        cursor.execute('insert into ...')
 | |
|        cursor.execute('delete from ...')
 | |
|        # ... more operations ...
 | |
| 
 | |
| The transaction should be committed if the code in the block runs flawlessly or
 | |
| rolled back if there's an exception. Here's the basic interface for
 | |
| :class:`DatabaseConnection` that I'll assume::
 | |
| 
 | |
|    class DatabaseConnection:
 | |
|        # Database interface
 | |
|        def cursor(self):
 | |
|            "Returns a cursor object and starts a new transaction"
 | |
|        def commit(self):
 | |
|            "Commits current transaction"
 | |
|        def rollback(self):
 | |
|            "Rolls back current transaction"
 | |
| 
 | |
| The :meth:`__enter__` method is pretty easy, having only to start a new
 | |
| transaction.  For this application the resulting cursor object would be a useful
 | |
| result, so the method will return it.  The user can then add ``as cursor`` to
 | |
| their ':keyword:`with`' statement to bind the cursor to a variable name. ::
 | |
| 
 | |
|    class DatabaseConnection:
 | |
|        ...
 | |
|        def __enter__(self):
 | |
|            # Code to start a new transaction
 | |
|            cursor = self.cursor()
 | |
|            return cursor
 | |
| 
 | |
| The :meth:`__exit__` method is the most complicated because it's where most of
 | |
| the work has to be done.  The method has to check if an exception occurred.  If
 | |
| there was no exception, the transaction is committed.  The transaction is rolled
 | |
| back if there was an exception.
 | |
| 
 | |
| In the code below, execution will just fall off the end of the function,
 | |
| returning the default value of ``None``.  ``None`` is false, so the exception
 | |
| will be re-raised automatically.  If you wished, you could be more explicit and
 | |
| add a :keyword:`return` statement at the marked location. ::
 | |
| 
 | |
|    class DatabaseConnection:
 | |
|        ...
 | |
|        def __exit__(self, type, value, tb):
 | |
|            if tb is None:
 | |
|                # No exception, so commit
 | |
|                self.commit()
 | |
|            else:
 | |
|                # Exception occurred, so rollback.
 | |
|                self.rollback()
 | |
|                # return False
 | |
| 
 | |
| 
 | |
| .. _new-module-contextlib:
 | |
| 
 | |
| The contextlib module
 | |
| ---------------------
 | |
| 
 | |
| The :mod:`contextlib` module provides some functions and a decorator that
 | |
| are useful when writing objects for use with the ':keyword:`with`' statement.
 | |
| 
 | |
| The decorator is called :func:`contextmanager`, and lets you write a single
 | |
| generator function instead of defining a new class.  The generator should yield
 | |
| exactly one value.  The code up to the :keyword:`yield` will be executed as the
 | |
| :meth:`__enter__` method, and the value yielded will be the method's return
 | |
| value that will get bound to the variable in the ':keyword:`with`' statement's
 | |
| :keyword:`!as` clause, if any.  The code after the :keyword:`!yield` will be
 | |
| executed in the :meth:`__exit__` method.  Any exception raised in the block will
 | |
| be raised by the :keyword:`!yield` statement.
 | |
| 
 | |
| Using this decorator, our database example from the previous section
 | |
| could be written as::
 | |
| 
 | |
|    from contextlib import contextmanager
 | |
| 
 | |
|    @contextmanager
 | |
|    def db_transaction(connection):
 | |
|        cursor = connection.cursor()
 | |
|        try:
 | |
|            yield cursor
 | |
|        except:
 | |
|            connection.rollback()
 | |
|            raise
 | |
|        else:
 | |
|            connection.commit()
 | |
| 
 | |
|    db = DatabaseConnection()
 | |
|    with db_transaction(db) as cursor:
 | |
|        ...
 | |
| 
 | |
| The :mod:`contextlib` module also has a ``nested(mgr1, mgr2, ...)`` function
 | |
| that combines a number of context managers so you don't need to write nested
 | |
| ':keyword:`with`' statements.  In this example, the single ':keyword:`!with`'
 | |
| statement both starts a database transaction and acquires a thread lock::
 | |
| 
 | |
|    lock = threading.Lock()
 | |
|    with nested (db_transaction(db), lock) as (cursor, locked):
 | |
|        ...
 | |
| 
 | |
| Finally, the :func:`closing` function returns its argument so that it can be
 | |
| bound to a variable, and calls the argument's ``.close()`` method at the end
 | |
| of the block. ::
 | |
| 
 | |
|    import urllib, sys
 | |
|    from contextlib import closing
 | |
| 
 | |
|    with closing(urllib.urlopen('http://www.yahoo.com')) as f:
 | |
|        for line in f:
 | |
|            sys.stdout.write(line)
 | |
| 
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`343` - The "with" statement
 | |
|       PEP written by Guido van Rossum and Nick Coghlan; implemented by Mike Bland,
 | |
|       Guido van Rossum, and Neal Norwitz.  The PEP shows the code generated for a
 | |
|       ':keyword:`with`' statement, which can be helpful in learning how the statement
 | |
|       works.
 | |
| 
 | |
|    The documentation  for the :mod:`contextlib` module.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-0366:
 | |
| 
 | |
| PEP 366: Explicit Relative Imports From a Main Module
 | |
| ============================================================
 | |
| 
 | |
| Python's :option:`-m` switch allows running a module as a script.
 | |
| When you ran a module that was located inside a package, relative
 | |
| imports didn't work correctly.
 | |
| 
 | |
| The fix for Python 2.6 adds a :attr:`__package__` attribute to
 | |
| modules.  When this attribute is present, relative imports will be
 | |
| relative to the value of this attribute instead of the
 | |
| :attr:`__name__` attribute.
 | |
| 
 | |
| PEP 302-style importers can then set :attr:`__package__` as necessary.
 | |
| The :mod:`runpy` module that implements the :option:`-m` switch now
 | |
| does this, so relative imports will now work correctly in scripts
 | |
| running from inside a package.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-0370:
 | |
| 
 | |
| PEP 370: Per-user ``site-packages`` Directory
 | |
| =====================================================
 | |
| 
 | |
| When you run Python, the module search path ``sys.path`` usually
 | |
| includes a directory whose path ends in ``"site-packages"``.  This
 | |
| directory is intended to hold locally-installed packages available to
 | |
| all users using a machine or a particular site installation.
 | |
| 
 | |
| Python 2.6 introduces a convention for user-specific site directories.
 | |
| The directory varies depending on the platform:
 | |
| 
 | |
| * Unix and Mac OS X: :file:`~/.local/`
 | |
| * Windows: :file:`%APPDATA%/Python`
 | |
| 
 | |
| Within this directory, there will be version-specific subdirectories,
 | |
| such as :file:`lib/python2.6/site-packages` on Unix/Mac OS and
 | |
| :file:`Python26/site-packages` on Windows.
 | |
| 
 | |
| If you don't like the default directory, it can be overridden by an
 | |
| environment variable.  :envvar:`PYTHONUSERBASE` sets the root
 | |
| directory used for all Python versions supporting this feature.  On
 | |
| Windows, the directory for application-specific data can be changed by
 | |
| setting the :envvar:`APPDATA` environment variable.  You can also
 | |
| modify the :file:`site.py` file for your Python installation.
 | |
| 
 | |
| The feature can be disabled entirely by running Python with the
 | |
| :option:`-s` option or setting the :envvar:`PYTHONNOUSERSITE`
 | |
| environment variable.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`370` - Per-user ``site-packages`` Directory
 | |
|      PEP written and implemented by Christian Heimes.
 | |
| 
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-0371:
 | |
| 
 | |
| PEP 371: The ``multiprocessing`` Package
 | |
| =====================================================
 | |
| 
 | |
| The new :mod:`multiprocessing` package lets Python programs create new
 | |
| processes that will perform a computation and return a result to the
 | |
| parent.  The parent and child processes can communicate using queues
 | |
| and pipes, synchronize their operations using locks and semaphores,
 | |
| and can share simple arrays of data.
 | |
| 
 | |
| The :mod:`multiprocessing` module started out as an exact emulation of
 | |
| the :mod:`threading` module using processes instead of threads.  That
 | |
| goal was discarded along the path to Python 2.6, but the general
 | |
| approach of the module is still similar.  The fundamental class
 | |
| is the :class:`Process`, which is passed a callable object and
 | |
| a collection of arguments.  The :meth:`start` method
 | |
| sets the callable running in a subprocess, after which you can call
 | |
| the :meth:`is_alive` method to check whether the subprocess is still running
 | |
| and the :meth:`join` method to wait for the process to exit.
 | |
| 
 | |
| Here's a simple example where the subprocess will calculate a
 | |
| factorial.  The function doing the calculation is written strangely so
 | |
| that it takes significantly longer when the input argument is a
 | |
| multiple of 4.
 | |
| 
 | |
| ::
 | |
| 
 | |
|     import time
 | |
|     from multiprocessing import Process, Queue
 | |
| 
 | |
| 
 | |
|     def factorial(queue, N):
 | |
|         "Compute a factorial."
 | |
|         # If N is a multiple of 4, this function will take much longer.
 | |
|         if (N % 4) == 0:
 | |
|             time.sleep(.05 * N/4)
 | |
| 
 | |
|         # Calculate the result
 | |
|         fact = 1L
 | |
|         for i in range(1, N+1):
 | |
|             fact = fact * i
 | |
| 
 | |
|         # Put the result on the queue
 | |
|         queue.put(fact)
 | |
| 
 | |
|     if __name__ == '__main__':
 | |
|         queue = Queue()
 | |
| 
 | |
|         N = 5
 | |
| 
 | |
|         p = Process(target=factorial, args=(queue, N))
 | |
|         p.start()
 | |
|         p.join()
 | |
| 
 | |
|         result = queue.get()
 | |
|         print 'Factorial', N, '=', result
 | |
| 
 | |
| A :class:`~queue.Queue` is used to communicate the result of the factorial.
 | |
| The :class:`~queue.Queue` object is stored in a global variable.
 | |
| The child process will use the value of the variable when the child
 | |
| was created; because it's a :class:`~queue.Queue`, parent and child can use
 | |
| the object to communicate.  (If the parent were to change the value of
 | |
| the global variable, the child's value would be unaffected, and vice
 | |
| versa.)
 | |
| 
 | |
| Two other classes, :class:`Pool` and :class:`Manager`, provide
 | |
| higher-level interfaces.  :class:`Pool` will create a fixed number of
 | |
| worker processes, and requests can then be distributed to the workers
 | |
| by calling :meth:`apply` or :meth:`apply_async` to add a single request,
 | |
| and :meth:`map` or :meth:`map_async` to add a number of
 | |
| requests.  The following code uses a :class:`Pool` to spread requests
 | |
| across 5 worker processes and retrieve a list of results::
 | |
| 
 | |
|     from multiprocessing import Pool
 | |
| 
 | |
|     def factorial(N, dictionary):
 | |
|         "Compute a factorial."
 | |
|         ...
 | |
|     p = Pool(5)
 | |
|     result = p.map(factorial, range(1, 1000, 10))
 | |
|     for v in result:
 | |
|         print v
 | |
| 
 | |
| This produces the following output::
 | |
| 
 | |
|     1
 | |
|     39916800
 | |
|     51090942171709440000
 | |
|     8222838654177922817725562880000000
 | |
|     33452526613163807108170062053440751665152000000000
 | |
|     ...
 | |
| 
 | |
| The other high-level interface, the :class:`Manager` class, creates a
 | |
| separate server process that can hold master copies of Python data
 | |
| structures.  Other processes can then access and modify these data
 | |
| structures using proxy objects.  The following example creates a
 | |
| shared dictionary by calling the :meth:`dict` method; the worker
 | |
| processes then insert values into the dictionary.  (Locking is not
 | |
| done for you automatically, which doesn't matter in this example.
 | |
| :class:`Manager`'s methods also include :meth:`Lock`, :meth:`RLock`,
 | |
| and :meth:`Semaphore` to create shared locks.)
 | |
| 
 | |
| ::
 | |
| 
 | |
|     import time
 | |
|     from multiprocessing import Pool, Manager
 | |
| 
 | |
|     def factorial(N, dictionary):
 | |
|         "Compute a factorial."
 | |
|         # Calculate the result
 | |
|         fact = 1L
 | |
|         for i in range(1, N+1):
 | |
|             fact = fact * i
 | |
| 
 | |
|         # Store result in dictionary
 | |
|         dictionary[N] = fact
 | |
| 
 | |
|     if __name__ == '__main__':
 | |
|         p = Pool(5)
 | |
|         mgr = Manager()
 | |
|         d = mgr.dict()         # Create shared dictionary
 | |
| 
 | |
|         # Run tasks using the pool
 | |
|         for N in range(1, 1000, 10):
 | |
|             p.apply_async(factorial, (N, d))
 | |
| 
 | |
|         # Mark pool as closed -- no more tasks can be added.
 | |
|         p.close()
 | |
| 
 | |
|         # Wait for tasks to exit
 | |
|         p.join()
 | |
| 
 | |
|         # Output results
 | |
|         for k, v in sorted(d.items()):
 | |
|             print k, v
 | |
| 
 | |
| This will produce the output::
 | |
| 
 | |
|     1 1
 | |
|     11 39916800
 | |
|     21 51090942171709440000
 | |
|     31 8222838654177922817725562880000000
 | |
|     41 33452526613163807108170062053440751665152000000000
 | |
|     51 15511187532873822802242430164693032110632597200169861120000...
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    The documentation for the :mod:`multiprocessing` module.
 | |
| 
 | |
|    :pep:`371` - Addition of the multiprocessing package
 | |
|      PEP written by Jesse Noller and Richard Oudkerk;
 | |
|      implemented by Richard Oudkerk and Jesse Noller.
 | |
| 
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-3101:
 | |
| 
 | |
| PEP 3101: Advanced String Formatting
 | |
| =====================================================
 | |
| 
 | |
| In Python 3.0, the `%` operator is supplemented by a more powerful string
 | |
| formatting method, :meth:`format`.  Support for the :meth:`str.format` method
 | |
| has been backported to Python 2.6.
 | |
| 
 | |
| In 2.6, both 8-bit and Unicode strings have a `.format()` method that
 | |
| treats the string as a template and takes the arguments to be formatted.
 | |
| The formatting template uses curly brackets (`{`, `}`) as special characters::
 | |
| 
 | |
|      >>> # Substitute positional argument 0 into the string.
 | |
|      >>> "User ID: {0}".format("root")
 | |
|      'User ID: root'
 | |
|      >>> # Use the named keyword arguments
 | |
|      >>> "User ID: {uid}   Last seen: {last_login}".format(
 | |
|      ...    uid="root",
 | |
|      ...    last_login = "5 Mar 2008 07:20")
 | |
|      'User ID: root   Last seen: 5 Mar 2008 07:20'
 | |
| 
 | |
| Curly brackets can be escaped by doubling them::
 | |
| 
 | |
|      >>> "Empty dict: {{}}".format()
 | |
|      "Empty dict: {}"
 | |
| 
 | |
| Field names can be integers indicating positional arguments, such as
 | |
| ``{0}``, ``{1}``, etc. or names of keyword arguments.  You can also
 | |
| supply compound field names that read attributes or access dictionary keys::
 | |
| 
 | |
|     >>> import sys
 | |
|     >>> print 'Platform: {0.platform}\nPython version: {0.version}'.format(sys)
 | |
|     Platform: darwin
 | |
|     Python version: 2.6a1+ (trunk:61261M, Mar  5 2008, 20:29:41)
 | |
|     [GCC 4.0.1 (Apple Computer, Inc. build 5367)]'
 | |
| 
 | |
|     >>> import mimetypes
 | |
|     >>> 'Content-type: {0[.mp4]}'.format(mimetypes.types_map)
 | |
|     'Content-type: video/mp4'
 | |
| 
 | |
| Note that when using dictionary-style notation such as ``[.mp4]``, you
 | |
| don't need to put any quotation marks around the string; it will look
 | |
| up the value using ``.mp4`` as the key.  Strings beginning with a
 | |
| number will be converted to an integer.  You can't write more
 | |
| complicated expressions inside a format string.
 | |
| 
 | |
| So far we've shown how to specify which field to substitute into the
 | |
| resulting string.  The precise formatting used is also controllable by
 | |
| adding a colon followed by a format specifier.  For example::
 | |
| 
 | |
|      >>> # Field 0: left justify, pad to 15 characters
 | |
|      >>> # Field 1: right justify, pad to 6 characters
 | |
|      >>> fmt = '{0:15} ${1:>6}'
 | |
|      >>> fmt.format('Registration', 35)
 | |
|      'Registration    $    35'
 | |
|      >>> fmt.format('Tutorial', 50)
 | |
|      'Tutorial        $    50'
 | |
|      >>> fmt.format('Banquet', 125)
 | |
|      'Banquet         $   125'
 | |
| 
 | |
| Format specifiers can reference other fields through nesting::
 | |
| 
 | |
|     >>> fmt = '{0:{1}}'
 | |
|     >>> width = 15
 | |
|     >>> fmt.format('Invoice #1234', width)
 | |
|     'Invoice #1234  '
 | |
|     >>> width = 35
 | |
|     >>> fmt.format('Invoice #1234', width)
 | |
|     'Invoice #1234                      '
 | |
| 
 | |
| The alignment of a field within the desired width can be specified:
 | |
| 
 | |
| ================ ============================================
 | |
| Character        Effect
 | |
| ================ ============================================
 | |
| < (default)      Left-align
 | |
| >                Right-align
 | |
| ^                Center
 | |
| =                (For numeric types only) Pad after the sign.
 | |
| ================ ============================================
 | |
| 
 | |
| Format specifiers can also include a presentation type, which
 | |
| controls how the value is formatted.  For example, floating-point numbers
 | |
| can be formatted as a general number or in exponential notation::
 | |
| 
 | |
|     >>> '{0:g}'.format(3.75)
 | |
|     '3.75'
 | |
|     >>> '{0:e}'.format(3.75)
 | |
|     '3.750000e+00'
 | |
| 
 | |
| A variety of presentation types are available.  Consult the 2.6
 | |
| documentation for a :ref:`complete list <formatstrings>`; here's a sample:
 | |
| 
 | |
| ===== ========================================================================
 | |
| ``b`` Binary. Outputs the number in base 2.
 | |
| ``c`` Character. Converts the integer to the corresponding Unicode character
 | |
|       before printing.
 | |
| ``d`` Decimal Integer. Outputs the number in base 10.
 | |
| ``o`` Octal format. Outputs the number in base 8.
 | |
| ``x`` Hex format. Outputs the number in base 16, using lower-case letters for
 | |
|       the digits above 9.
 | |
| ``e`` Exponent notation. Prints the number in scientific notation using the
 | |
|       letter 'e' to indicate the exponent.
 | |
| ``g`` General format. This prints the number as a fixed-point number, unless
 | |
|       the number is too large, in which case it switches to 'e' exponent
 | |
|       notation.
 | |
| ``n`` Number. This is the same as 'g' (for floats) or 'd' (for integers),
 | |
|       except that it uses the current locale setting to insert the appropriate
 | |
|       number separator characters.
 | |
| ``%`` Percentage. Multiplies the number by 100 and displays in fixed ('f')
 | |
|       format, followed by a percent sign.
 | |
| ===== ========================================================================
 | |
| 
 | |
| Classes and types can define a :meth:`__format__` method to control how they're
 | |
| formatted.  It receives a single argument, the format specifier::
 | |
| 
 | |
|    def __format__(self, format_spec):
 | |
|        if isinstance(format_spec, unicode):
 | |
|            return unicode(str(self))
 | |
|        else:
 | |
|            return str(self)
 | |
| 
 | |
| There's also a :func:`format` builtin that will format a single
 | |
| value.  It calls the type's :meth:`__format__` method with the
 | |
| provided specifier::
 | |
| 
 | |
|     >>> format(75.6564, '.2f')
 | |
|     '75.66'
 | |
| 
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :ref:`formatstrings`
 | |
|       The reference documentation for format fields.
 | |
| 
 | |
|    :pep:`3101` - Advanced String Formatting
 | |
|       PEP written by Talin. Implemented by Eric Smith.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-3105:
 | |
| 
 | |
| PEP 3105: ``print`` As a Function
 | |
| =====================================================
 | |
| 
 | |
| The ``print`` statement becomes the :func:`print` function in Python 3.0.
 | |
| Making :func:`print` a function makes it possible to replace the function
 | |
| by doing ``def print(...)`` or importing a new function from somewhere else.
 | |
| 
 | |
| Python 2.6 has a ``__future__`` import that removes ``print`` as language
 | |
| syntax, letting you use the functional form instead.  For example::
 | |
| 
 | |
|     >>> from __future__ import print_function
 | |
|     >>> print('# of entries', len(dictionary), file=sys.stderr)
 | |
| 
 | |
| The signature of the new function is::
 | |
| 
 | |
|     def print(*args, sep=' ', end='\n', file=None)
 | |
| 
 | |
| 
 | |
| The parameters are:
 | |
| 
 | |
|  * *args*: positional arguments whose values will be printed out.
 | |
|  * *sep*: the separator, which will be printed between arguments.
 | |
|  * *end*: the ending text, which will be printed after all of the
 | |
|    arguments have been output.
 | |
|  * *file*: the file object to which the output will be sent.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`3105` - Make print a function
 | |
|       PEP written by Georg Brandl.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-3110:
 | |
| 
 | |
| PEP 3110: Exception-Handling Changes
 | |
| =====================================================
 | |
| 
 | |
| One error that Python programmers occasionally make
 | |
| is writing the following code::
 | |
| 
 | |
|     try:
 | |
|         ...
 | |
|     except TypeError, ValueError:  # Wrong!
 | |
|         ...
 | |
| 
 | |
| The author is probably trying to catch both :exc:`TypeError` and
 | |
| :exc:`ValueError` exceptions, but this code actually does something
 | |
| different: it will catch :exc:`TypeError` and bind the resulting
 | |
| exception object to the local name ``"ValueError"``.  The
 | |
| :exc:`ValueError` exception will not be caught at all.  The correct
 | |
| code specifies a tuple of exceptions::
 | |
| 
 | |
|     try:
 | |
|         ...
 | |
|     except (TypeError, ValueError):
 | |
|         ...
 | |
| 
 | |
| This error happens because the use of the comma here is ambiguous:
 | |
| does it indicate two different nodes in the parse tree, or a single
 | |
| node that's a tuple?
 | |
| 
 | |
| Python 3.0 makes this unambiguous by replacing the comma with the word
 | |
| "as".  To catch an exception and store the exception object in the
 | |
| variable ``exc``, you must write::
 | |
| 
 | |
|     try:
 | |
|         ...
 | |
|     except TypeError as exc:
 | |
|         ...
 | |
| 
 | |
| Python 3.0 will only support the use of "as", and therefore interprets
 | |
| the first example as catching two different exceptions.  Python 2.6
 | |
| supports both the comma and "as", so existing code will continue to
 | |
| work.  We therefore suggest using "as" when writing new Python code
 | |
| that will only be executed with 2.6.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`3110` - Catching Exceptions in Python 3000
 | |
|       PEP written and implemented by Collin Winter.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-3112:
 | |
| 
 | |
| PEP 3112: Byte Literals
 | |
| =====================================================
 | |
| 
 | |
| Python 3.0 adopts Unicode as the language's fundamental string type and
 | |
| denotes 8-bit literals differently, either as ``b'string'``
 | |
| or using a :class:`bytes` constructor.  For future compatibility,
 | |
| Python 2.6 adds :class:`bytes` as a synonym for the :class:`str` type,
 | |
| and it also supports the ``b''`` notation.
 | |
| 
 | |
| 
 | |
| The 2.6 :class:`str` differs from 3.0's :class:`bytes` type in various
 | |
| ways; most notably, the constructor is completely different.  In 3.0,
 | |
| ``bytes([65, 66, 67])`` is 3 elements long, containing the bytes
 | |
| representing ``ABC``; in 2.6, ``bytes([65, 66, 67])`` returns the
 | |
| 12-byte string representing the :func:`str` of the list.
 | |
| 
 | |
| The primary use of :class:`bytes` in 2.6 will be to write tests of
 | |
| object type such as ``isinstance(x, bytes)``.  This will help the 2to3
 | |
| converter, which can't tell whether 2.x code intends strings to
 | |
| contain either characters or 8-bit bytes; you can now
 | |
| use either :class:`bytes` or :class:`str` to represent your intention
 | |
| exactly, and the resulting code will also be correct in Python 3.0.
 | |
| 
 | |
| There's also a ``__future__`` import that causes all string literals
 | |
| to become Unicode strings.  This means that ``\u`` escape sequences
 | |
| can be used to include Unicode characters::
 | |
| 
 | |
| 
 | |
|     from __future__ import unicode_literals
 | |
| 
 | |
|     s = ('\u751f\u3080\u304e\u3000\u751f\u3054'
 | |
|          '\u3081\u3000\u751f\u305f\u307e\u3054')
 | |
| 
 | |
|     print len(s)               # 12 Unicode characters
 | |
| 
 | |
| At the C level, Python 3.0 will rename the existing 8-bit
 | |
| string type, called :c:type:`PyStringObject` in Python 2.x,
 | |
| to :c:type:`PyBytesObject`.  Python 2.6 uses ``#define``
 | |
| to support using the names :c:func:`PyBytesObject`,
 | |
| :c:func:`PyBytes_Check`, :c:func:`PyBytes_FromStringAndSize`,
 | |
| and all the other functions and macros used with strings.
 | |
| 
 | |
| Instances of the :class:`bytes` type are immutable just
 | |
| as strings are.  A new :class:`bytearray` type stores a mutable
 | |
| sequence of bytes::
 | |
| 
 | |
|     >>> bytearray([65, 66, 67])
 | |
|     bytearray(b'ABC')
 | |
|     >>> b = bytearray(u'\u21ef\u3244', 'utf-8')
 | |
|     >>> b
 | |
|     bytearray(b'\xe2\x87\xaf\xe3\x89\x84')
 | |
|     >>> b[0] = '\xe3'
 | |
|     >>> b
 | |
|     bytearray(b'\xe3\x87\xaf\xe3\x89\x84')
 | |
|     >>> unicode(str(b), 'utf-8')
 | |
|     u'\u31ef \u3244'
 | |
| 
 | |
| Byte arrays support most of the methods of string types, such as
 | |
| :meth:`startswith`/:meth:`endswith`, :meth:`find`/:meth:`rfind`,
 | |
| and some of the methods of lists, such as :meth:`append`,
 | |
| :meth:`pop`,  and :meth:`reverse`.
 | |
| 
 | |
| ::
 | |
| 
 | |
|     >>> b = bytearray('ABC')
 | |
|     >>> b.append('d')
 | |
|     >>> b.append(ord('e'))
 | |
|     >>> b
 | |
|     bytearray(b'ABCde')
 | |
| 
 | |
| There's also a corresponding C API, with
 | |
| :c:func:`PyByteArray_FromObject`,
 | |
| :c:func:`PyByteArray_FromStringAndSize`,
 | |
| and various other functions.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`3112` - Bytes literals in Python 3000
 | |
|       PEP written by Jason Orendorff; backported to 2.6 by Christian Heimes.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-3116:
 | |
| 
 | |
| PEP 3116: New I/O Library
 | |
| =====================================================
 | |
| 
 | |
| Python's built-in file objects support a number of methods, but
 | |
| file-like objects don't necessarily support all of them.  Objects that
 | |
| imitate files usually support :meth:`read` and :meth:`write`, but they
 | |
| may not support :meth:`readline`, for example.  Python 3.0 introduces
 | |
| a layered I/O library in the :mod:`io` module that separates buffering
 | |
| and text-handling features from the fundamental read and write
 | |
| operations.
 | |
| 
 | |
| There are three levels of abstract base classes provided by
 | |
| the :mod:`io` module:
 | |
| 
 | |
| * :class:`RawIOBase` defines raw I/O operations: :meth:`read`,
 | |
|   :meth:`readinto`,
 | |
|   :meth:`write`, :meth:`seek`, :meth:`tell`, :meth:`truncate`,
 | |
|   and :meth:`close`.
 | |
|   Most of the methods of this class will often map to a single system call.
 | |
|   There are also :meth:`readable`, :meth:`writable`, and :meth:`seekable`
 | |
|   methods for determining what operations a given object will allow.
 | |
| 
 | |
|   Python 3.0 has concrete implementations of this class for files and
 | |
|   sockets, but Python 2.6 hasn't restructured its file and socket objects
 | |
|   in this way.
 | |
| 
 | |
|   .. XXX should 2.6 register them in io.py?
 | |
| 
 | |
| * :class:`BufferedIOBase` is an abstract base class that
 | |
|   buffers data in memory to reduce the number of
 | |
|   system calls used, making I/O processing more efficient.
 | |
|   It supports all of the methods of :class:`RawIOBase`,
 | |
|   and adds a :attr:`raw` attribute holding the underlying raw object.
 | |
| 
 | |
|   There are five concrete classes implementing this ABC.
 | |
|   :class:`BufferedWriter` and :class:`BufferedReader` are for objects
 | |
|   that support write-only or read-only usage that have a :meth:`seek`
 | |
|   method for random access.  :class:`BufferedRandom` objects support
 | |
|   read and write access upon the same underlying stream, and
 | |
|   :class:`BufferedRWPair` is for objects such as TTYs that have both
 | |
|   read and write operations acting upon unconnected streams of data.
 | |
|   The :class:`BytesIO` class supports reading, writing, and seeking
 | |
|   over an in-memory buffer.
 | |
| 
 | |
|   .. index::
 | |
|      single: universal newlines; What's new
 | |
| 
 | |
| * :class:`TextIOBase`: Provides functions for reading and writing
 | |
|   strings (remember, strings will be Unicode in Python 3.0),
 | |
|   and supporting :term:`universal newlines`.  :class:`TextIOBase` defines
 | |
|   the :meth:`readline` method and supports iteration upon
 | |
|   objects.
 | |
| 
 | |
|   There are two concrete implementations.  :class:`TextIOWrapper`
 | |
|   wraps a buffered I/O object, supporting all of the methods for
 | |
|   text I/O and adding a :attr:`buffer` attribute for access
 | |
|   to the underlying object.  :class:`StringIO` simply buffers
 | |
|   everything in memory without ever writing anything to disk.
 | |
| 
 | |
|   (In Python 2.6, :class:`io.StringIO` is implemented in
 | |
|   pure Python, so it's pretty slow.   You should therefore stick with the
 | |
|   existing :mod:`StringIO` module or :mod:`cStringIO` for now.  At some
 | |
|   point Python 3.0's :mod:`io` module will be rewritten into C for speed,
 | |
|   and perhaps the C implementation will be  backported to the 2.x releases.)
 | |
| 
 | |
| In Python 2.6, the underlying implementations haven't been
 | |
| restructured to build on top of the :mod:`io` module's classes.  The
 | |
| module is being provided to make it easier to write code that's
 | |
| forward-compatible with 3.0, and to save developers the effort of writing
 | |
| their own implementations of buffering and text I/O.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`3116` - New I/O
 | |
|       PEP written by Daniel Stutzbach, Mike Verdone, and Guido van Rossum.
 | |
|       Code by Guido van Rossum, Georg Brandl, Walter Doerwald,
 | |
|       Jeremy Hylton, Martin von Löwis, Tony Lownds, and others.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-3118:
 | |
| 
 | |
| PEP 3118: Revised Buffer Protocol
 | |
| =====================================================
 | |
| 
 | |
| The buffer protocol is a C-level API that lets Python types
 | |
| exchange pointers into their internal representations.  A
 | |
| memory-mapped file can be viewed as a buffer of characters, for
 | |
| example, and this lets another module such as :mod:`re`
 | |
| treat memory-mapped files as a string of characters to be searched.
 | |
| 
 | |
| The primary users of the buffer protocol are numeric-processing
 | |
| packages such as NumPy, which expose the internal representation
 | |
| of arrays so that callers can write data directly into an array instead
 | |
| of going through a slower API.  This PEP updates the buffer protocol in light of experience
 | |
| from NumPy development, adding a number of new features
 | |
| such as indicating the shape of an array or locking a memory region.
 | |
| 
 | |
| The most important new C API function is
 | |
| ``PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags)``, which
 | |
| takes an object and a set of flags, and fills in the
 | |
| ``Py_buffer`` structure with information
 | |
| about the object's memory representation.  Objects
 | |
| can use this operation to lock memory in place
 | |
| while an external caller could be modifying the contents,
 | |
| so there's a corresponding ``PyBuffer_Release(Py_buffer *view)`` to
 | |
| indicate that the external caller is done.
 | |
| 
 | |
| .. XXX PyObject_GetBuffer not documented in c-api
 | |
| 
 | |
| The *flags* argument to :c:func:`PyObject_GetBuffer` specifies
 | |
| constraints upon the memory returned.  Some examples are:
 | |
| 
 | |
|  * :const:`PyBUF_WRITABLE` indicates that the memory must be writable.
 | |
| 
 | |
|  * :const:`PyBUF_LOCK` requests a read-only or exclusive lock on the memory.
 | |
| 
 | |
|  * :const:`PyBUF_C_CONTIGUOUS` and :const:`PyBUF_F_CONTIGUOUS`
 | |
|    requests a C-contiguous (last dimension varies the fastest) or
 | |
|    Fortran-contiguous (first dimension varies the fastest) array layout.
 | |
| 
 | |
| Two new argument codes for :c:func:`PyArg_ParseTuple`,
 | |
| ``s*`` and ``z*``, return locked buffer objects for a parameter.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`3118` - Revising the buffer protocol
 | |
|       PEP written by Travis Oliphant and Carl Banks; implemented by
 | |
|       Travis Oliphant.
 | |
| 
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-3119:
 | |
| 
 | |
| PEP 3119: Abstract Base Classes
 | |
| =====================================================
 | |
| 
 | |
| Some object-oriented languages such as Java support interfaces,
 | |
| declaring that a class has a given set of methods or supports a given
 | |
| access protocol.  Abstract Base Classes (or ABCs) are an equivalent
 | |
| feature for Python. The ABC support consists of an :mod:`abc` module
 | |
| containing a metaclass called :class:`ABCMeta`, special handling of
 | |
| this metaclass by the :func:`isinstance` and :func:`issubclass`
 | |
| builtins, and a collection of basic ABCs that the Python developers
 | |
| think will be widely useful.  Future versions of Python will probably
 | |
| add more ABCs.
 | |
| 
 | |
| Let's say you have a particular class and wish to know whether it supports
 | |
| dictionary-style access.  The phrase "dictionary-style" is vague, however.
 | |
| It probably means that accessing items with ``obj[1]`` works.
 | |
| Does it imply that setting items with ``obj[2] = value`` works?
 | |
| Or that the object will have :meth:`keys`, :meth:`values`, and :meth:`items`
 | |
| methods?  What about the iterative variants  such as :meth:`iterkeys`?  :meth:`copy`
 | |
| and :meth:`update`?  Iterating over the object with :func:`iter`?
 | |
| 
 | |
| The Python 2.6 :mod:`collections` module includes a number of
 | |
| different ABCs that represent these distinctions.  :class:`Iterable`
 | |
| indicates that a class defines :meth:`__iter__`, and
 | |
| :class:`Container` means the class defines a :meth:`__contains__`
 | |
| method and therefore supports ``x in y`` expressions.  The basic
 | |
| dictionary interface of getting items, setting items, and
 | |
| :meth:`keys`, :meth:`values`, and :meth:`items`, is defined by the
 | |
| :class:`MutableMapping` ABC.
 | |
| 
 | |
| You can derive your own classes from a particular ABC
 | |
| to indicate they support that ABC's interface::
 | |
| 
 | |
|     import collections
 | |
| 
 | |
|     class Storage(collections.MutableMapping):
 | |
|         ...
 | |
| 
 | |
| 
 | |
| Alternatively, you could write the class without deriving from
 | |
| the desired ABC and instead register the class by
 | |
| calling the ABC's :meth:`register` method::
 | |
| 
 | |
|     import collections
 | |
| 
 | |
|     class Storage:
 | |
|         ...
 | |
| 
 | |
|     collections.MutableMapping.register(Storage)
 | |
| 
 | |
| For classes that you write, deriving from the ABC is probably clearer.
 | |
| The :meth:`register`  method is useful when you've written a new
 | |
| ABC that can describe an existing type or class, or if you want
 | |
| to declare that some third-party class implements an ABC.
 | |
| For example, if you defined a :class:`PrintableType` ABC,
 | |
| it's legal to do::
 | |
| 
 | |
|   # Register Python's types
 | |
|   PrintableType.register(int)
 | |
|   PrintableType.register(float)
 | |
|   PrintableType.register(str)
 | |
| 
 | |
| Classes should obey the semantics specified by an ABC, but
 | |
| Python can't check this; it's up to the class author to
 | |
| understand the ABC's requirements and to implement the code accordingly.
 | |
| 
 | |
| To check whether an object supports a particular interface, you can
 | |
| now write::
 | |
| 
 | |
|     def func(d):
 | |
|         if not isinstance(d, collections.MutableMapping):
 | |
|             raise ValueError("Mapping object expected, not %r" % d)
 | |
| 
 | |
| Don't feel that you must now begin writing lots of checks as in the
 | |
| above example.  Python has a strong tradition of duck-typing, where
 | |
| explicit type-checking is never done and code simply calls methods on
 | |
| an object, trusting that those methods will be there and raising an
 | |
| exception if they aren't.  Be judicious in checking for ABCs and only
 | |
| do it where it's absolutely necessary.
 | |
| 
 | |
| You can write your own ABCs by using ``abc.ABCMeta`` as the
 | |
| metaclass in a class definition::
 | |
| 
 | |
|     from abc import ABCMeta, abstractmethod
 | |
| 
 | |
|     class Drawable():
 | |
|         __metaclass__ = ABCMeta
 | |
| 
 | |
|         @abstractmethod
 | |
|         def draw(self, x, y, scale=1.0):
 | |
|             pass
 | |
| 
 | |
|         def draw_doubled(self, x, y):
 | |
|             self.draw(x, y, scale=2.0)
 | |
| 
 | |
| 
 | |
|     class Square(Drawable):
 | |
|         def draw(self, x, y, scale):
 | |
|             ...
 | |
| 
 | |
| 
 | |
| In the :class:`Drawable` ABC above, the :meth:`draw_doubled` method
 | |
| renders the object at twice its size and can be implemented in terms
 | |
| of other methods described in :class:`Drawable`.  Classes implementing
 | |
| this ABC therefore don't need to provide their own implementation
 | |
| of :meth:`draw_doubled`, though they can do so.  An implementation
 | |
| of :meth:`draw` is necessary, though; the ABC can't provide
 | |
| a useful generic implementation.
 | |
| 
 | |
| You can apply the ``@abstractmethod`` decorator to methods such as
 | |
| :meth:`draw` that must be implemented; Python will then raise an
 | |
| exception for classes that don't define the method.
 | |
| Note that the exception is only raised when you actually
 | |
| try to create an instance of a subclass lacking the method::
 | |
| 
 | |
|     >>> class Circle(Drawable):
 | |
|     ...     pass
 | |
|     ...
 | |
|     >>> c = Circle()
 | |
|     Traceback (most recent call last):
 | |
|       File "<stdin>", line 1, in <module>
 | |
|     TypeError: Can't instantiate abstract class Circle with abstract methods draw
 | |
|     >>>
 | |
| 
 | |
| Abstract data attributes can be declared using the
 | |
| ``@abstractproperty`` decorator::
 | |
| 
 | |
|     from abc import abstractproperty
 | |
|     ...
 | |
| 
 | |
|     @abstractproperty
 | |
|     def readonly(self):
 | |
|        return self._x
 | |
| 
 | |
| Subclasses must then define a :meth:`readonly` property.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`3119` - Introducing Abstract Base Classes
 | |
|       PEP written by Guido van Rossum and Talin.
 | |
|       Implemented by Guido van Rossum.
 | |
|       Backported to 2.6 by Benjamin Aranguren, with Alex Martelli.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-3127:
 | |
| 
 | |
| PEP 3127: Integer Literal Support and Syntax
 | |
| =====================================================
 | |
| 
 | |
| Python 3.0 changes the syntax for octal (base-8) integer literals,
 | |
| prefixing them with "0o" or "0O" instead of a leading zero, and adds
 | |
| support for binary (base-2) integer literals, signalled by a "0b" or
 | |
| "0B" prefix.
 | |
| 
 | |
| Python 2.6 doesn't drop support for a leading 0 signalling
 | |
| an octal number, but it does add support for "0o" and "0b"::
 | |
| 
 | |
|     >>> 0o21, 2*8 + 1
 | |
|     (17, 17)
 | |
|     >>> 0b101111
 | |
|     47
 | |
| 
 | |
| The :func:`oct` builtin still returns numbers
 | |
| prefixed with a leading zero, and a new :func:`bin`
 | |
| builtin returns the binary representation for a number::
 | |
| 
 | |
|     >>> oct(42)
 | |
|     '052'
 | |
|     >>> future_builtins.oct(42)
 | |
|     '0o52'
 | |
|     >>> bin(173)
 | |
|     '0b10101101'
 | |
| 
 | |
| The :func:`int` and :func:`long` builtins will now accept the "0o"
 | |
| and "0b" prefixes when base-8 or base-2 are requested, or when the
 | |
| *base* argument is zero (signalling that the base used should be
 | |
| determined from the string)::
 | |
| 
 | |
|     >>> int ('0o52', 0)
 | |
|     42
 | |
|     >>> int('1101', 2)
 | |
|     13
 | |
|     >>> int('0b1101', 2)
 | |
|     13
 | |
|     >>> int('0b1101', 0)
 | |
|     13
 | |
| 
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`3127` - Integer Literal Support and Syntax
 | |
|       PEP written by Patrick Maupin; backported to 2.6 by
 | |
|       Eric Smith.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-3129:
 | |
| 
 | |
| PEP 3129: Class Decorators
 | |
| =====================================================
 | |
| 
 | |
| Decorators have been extended from functions to classes.  It's now legal to
 | |
| write::
 | |
| 
 | |
|   @foo
 | |
|   @bar
 | |
|   class A:
 | |
|     pass
 | |
| 
 | |
| This is equivalent to::
 | |
| 
 | |
|   class A:
 | |
|     pass
 | |
| 
 | |
|   A = foo(bar(A))
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`3129` - Class Decorators
 | |
|       PEP written by Collin Winter.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _pep-3141:
 | |
| 
 | |
| PEP 3141: A Type Hierarchy for Numbers
 | |
| =====================================================
 | |
| 
 | |
| Python 3.0 adds several abstract base classes for numeric types
 | |
| inspired by Scheme's numeric tower.  These classes were backported to
 | |
| 2.6 as the :mod:`numbers` module.
 | |
| 
 | |
| The most general ABC is :class:`Number`.  It defines no operations at
 | |
| all, and only exists to allow checking if an object is a number by
 | |
| doing ``isinstance(obj, Number)``.
 | |
| 
 | |
| :class:`Complex` is a subclass of :class:`Number`.  Complex numbers
 | |
| can undergo the basic operations of addition, subtraction,
 | |
| multiplication, division, and exponentiation, and you can retrieve the
 | |
| real and imaginary parts and obtain a number's conjugate.  Python's built-in
 | |
| complex type is an implementation of :class:`Complex`.
 | |
| 
 | |
| :class:`Real` further derives from :class:`Complex`, and adds
 | |
| operations that only work on real numbers: :func:`floor`, :func:`trunc`,
 | |
| rounding, taking the remainder mod N, floor division,
 | |
| and comparisons.
 | |
| 
 | |
| :class:`Rational` numbers derive from :class:`Real`, have
 | |
| :attr:`numerator` and :attr:`denominator` properties, and can be
 | |
| converted to floats.  Python 2.6 adds a simple rational-number class,
 | |
| :class:`Fraction`, in the :mod:`fractions` module.  (It's called
 | |
| :class:`Fraction` instead of :class:`Rational` to avoid
 | |
| a name clash with :class:`numbers.Rational`.)
 | |
| 
 | |
| :class:`Integral` numbers derive from :class:`Rational`, and
 | |
| can be shifted left and right with ``<<`` and ``>>``,
 | |
| combined using bitwise operations such as ``&`` and ``|``,
 | |
| and can be used as array indexes and slice boundaries.
 | |
| 
 | |
| In Python 3.0, the PEP slightly redefines the existing builtins
 | |
| :func:`round`, :func:`math.floor`, :func:`math.ceil`, and adds a new
 | |
| one, :func:`math.trunc`, that's been backported to Python 2.6.
 | |
| :func:`math.trunc` rounds toward zero, returning the closest
 | |
| :class:`Integral` that's between the function's argument and zero.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    :pep:`3141` - A Type Hierarchy for Numbers
 | |
|       PEP written by Jeffrey Yasskin.
 | |
| 
 | |
|    `Scheme's numerical tower <https://www.gnu.org/software/guile/manual/html_node/Numerical-Tower.html#Numerical-Tower>`__, from the Guile manual.
 | |
| 
 | |
|    `Scheme's number datatypes <http://schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html#%_sec_6.2>`__ from the R5RS Scheme specification.
 | |
| 
 | |
| 
 | |
| The :mod:`fractions` Module
 | |
| --------------------------------------------------
 | |
| 
 | |
| To fill out the hierarchy of numeric types, the :mod:`fractions`
 | |
| module provides a rational-number class.  Rational numbers store their
 | |
| values as a numerator and denominator forming a fraction, and can
 | |
| exactly represent numbers such as ``2/3`` that floating-point numbers
 | |
| can only approximate.
 | |
| 
 | |
| The :class:`Fraction` constructor takes two :class:`Integral` values
 | |
| that will be the numerator and denominator of the resulting fraction. ::
 | |
| 
 | |
|     >>> from fractions import Fraction
 | |
|     >>> a = Fraction(2, 3)
 | |
|     >>> b = Fraction(2, 5)
 | |
|     >>> float(a), float(b)
 | |
|     (0.66666666666666663, 0.40000000000000002)
 | |
|     >>> a+b
 | |
|     Fraction(16, 15)
 | |
|     >>> a/b
 | |
|     Fraction(5, 3)
 | |
| 
 | |
| For converting floating-point numbers to rationals,
 | |
| the float type now has an :meth:`as_integer_ratio()` method that returns
 | |
| the numerator and denominator for a fraction that evaluates to the same
 | |
| floating-point value::
 | |
| 
 | |
|     >>> (2.5) .as_integer_ratio()
 | |
|     (5, 2)
 | |
|     >>> (3.1415) .as_integer_ratio()
 | |
|     (7074029114692207L, 2251799813685248L)
 | |
|     >>> (1./3) .as_integer_ratio()
 | |
|     (6004799503160661L, 18014398509481984L)
 | |
| 
 | |
| Note that values that can only be approximated by floating-point
 | |
| numbers, such as 1./3, are not simplified to the number being
 | |
| approximated; the fraction attempts to match the floating-point value
 | |
| **exactly**.
 | |
| 
 | |
| The :mod:`fractions` module is based upon an implementation by Sjoerd
 | |
| Mullender that was in Python's :file:`Demo/classes/` directory for a
 | |
| long time.  This implementation was significantly updated by Jeffrey
 | |
| Yasskin.
 | |
| 
 | |
| 
 | |
| 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 or zip archive is automatically inserted
 | |
|   as the first entry in sys.path.  (Suggestion and initial patch by
 | |
|   Andy Chu, subsequently revised by Phillip J. Eby and Nick Coghlan;
 | |
|   :issue:`1739468`.)
 | |
| 
 | |
| * The :func:`hasattr` function was catching and ignoring all errors,
 | |
|   under the assumption that they meant a :meth:`__getattr__` method
 | |
|   was failing somehow and the return value of :func:`hasattr` would
 | |
|   therefore be ``False``.  This logic shouldn't be applied to
 | |
|   :exc:`KeyboardInterrupt` and :exc:`SystemExit`, however; Python 2.6
 | |
|   will no longer discard such exceptions when :func:`hasattr`
 | |
|   encounters them.  (Fixed by Benjamin Peterson; :issue:`2196`.)
 | |
| 
 | |
| * When calling a function using the ``**`` syntax to provide keyword
 | |
|   arguments, you are no longer required to use a Python dictionary;
 | |
|   any mapping will now work::
 | |
| 
 | |
|     >>> def f(**kw):
 | |
|     ...    print sorted(kw)
 | |
|     ...
 | |
|     >>> ud=UserDict.UserDict()
 | |
|     >>> ud['a'] = 1
 | |
|     >>> ud['b'] = 'string'
 | |
|     >>> f(**ud)
 | |
|     ['a', 'b']
 | |
| 
 | |
|   (Contributed by Alexander Belopolsky; :issue:`1686487`.)
 | |
| 
 | |
|   It's also become legal to provide keyword arguments after a ``*args`` argument
 | |
|   to a function call. ::
 | |
| 
 | |
|     >>> def f(*args, **kw):
 | |
|     ...     print args, kw
 | |
|     ...
 | |
|     >>> f(1,2,3, *(4,5,6), keyword=13)
 | |
|     (1, 2, 3, 4, 5, 6) {'keyword': 13}
 | |
| 
 | |
|   Previously this would have been a syntax error.
 | |
|   (Contributed by Amaury Forgeot d'Arc; :issue:`3473`.)
 | |
| 
 | |
| * A new builtin, ``next(iterator, [default])`` returns the next item
 | |
|   from the specified iterator.  If the *default* argument is supplied,
 | |
|   it will be returned if *iterator* has been exhausted; otherwise,
 | |
|   the :exc:`StopIteration` exception will be raised.  (Backported
 | |
|   in :issue:`2719`.)
 | |
| 
 | |
| * Tuples now have :meth:`index` and :meth:`count` methods matching the
 | |
|   list type's :meth:`index` and :meth:`count` methods::
 | |
| 
 | |
|     >>> t = (0,1,2,3,4,0,1,2)
 | |
|     >>> t.index(3)
 | |
|     3
 | |
|     >>> t.count(0)
 | |
|     2
 | |
| 
 | |
|   (Contributed by Raymond Hettinger)
 | |
| 
 | |
| * The built-in types now have improved support for extended slicing syntax,
 | |
|   accepting various combinations of ``(start, stop, step)``.
 | |
|   Previously, the support was partial and certain corner cases wouldn't work.
 | |
|   (Implemented by Thomas Wouters.)
 | |
| 
 | |
|   .. Revision 57619
 | |
| 
 | |
| * Properties now have three attributes, :attr:`getter`, :attr:`setter`
 | |
|   and :attr:`deleter`, that are decorators providing useful shortcuts
 | |
|   for adding a getter, setter or deleter function to an existing
 | |
|   property. You would use them like this::
 | |
| 
 | |
|     class C(object):
 | |
|         @property
 | |
|         def x(self):
 | |
|             return self._x
 | |
| 
 | |
|         @x.setter
 | |
|         def x(self, value):
 | |
|             self._x = value
 | |
| 
 | |
|         @x.deleter
 | |
|         def x(self):
 | |
|             del self._x
 | |
| 
 | |
|     class D(C):
 | |
|         @C.x.getter
 | |
|         def x(self):
 | |
|             return self._x * 2
 | |
| 
 | |
|         @x.setter
 | |
|         def x(self, value):
 | |
|             self._x = value / 2
 | |
| 
 | |
| * Several methods of the built-in set types now accept multiple iterables:
 | |
|   :meth:`intersection`,
 | |
|   :meth:`intersection_update`,
 | |
|   :meth:`union`, :meth:`update`,
 | |
|   :meth:`difference` and :meth:`difference_update`.
 | |
| 
 | |
|   ::
 | |
| 
 | |
|     >>> s=set('1234567890')
 | |
|     >>> s.intersection('abc123', 'cdf246')  # Intersection between all inputs
 | |
|     set(['2'])
 | |
|     >>> s.difference('246', '789')
 | |
|     set(['1', '0', '3', '5'])
 | |
| 
 | |
|   (Contributed by Raymond Hettinger.)
 | |
| 
 | |
| * Many floating-point features were added.  The :func:`float` function
 | |
|   will now turn the string ``nan`` into an
 | |
|   IEEE 754 Not A Number value, and ``+inf`` and ``-inf`` into
 | |
|   positive or negative infinity.  This works on any platform with
 | |
|   IEEE 754 semantics.  (Contributed by Christian Heimes; :issue:`1635`.)
 | |
| 
 | |
|   Other functions in the :mod:`math` module, :func:`isinf` and
 | |
|   :func:`isnan`, return true if their floating-point argument is
 | |
|   infinite or Not A Number.  (:issue:`1640`)
 | |
| 
 | |
|   Conversion functions were added to convert floating-point numbers
 | |
|   into hexadecimal strings (:issue:`3008`).  These functions
 | |
|   convert floats to and from a string representation without
 | |
|   introducing rounding errors from the conversion between decimal and
 | |
|   binary.  Floats have a :meth:`hex` method that returns a string
 | |
|   representation, and the ``float.fromhex()`` method converts a string
 | |
|   back into a number::
 | |
| 
 | |
|       >>> a = 3.75
 | |
|       >>> a.hex()
 | |
|       '0x1.e000000000000p+1'
 | |
|       >>> float.fromhex('0x1.e000000000000p+1')
 | |
|       3.75
 | |
|       >>> b=1./3
 | |
|       >>> b.hex()
 | |
|       '0x1.5555555555555p-2'
 | |
| 
 | |
| * A numerical nicety: when creating a complex number from two floats
 | |
|   on systems that support signed zeros (-0 and +0), the
 | |
|   :func:`complex` constructor will now preserve the sign
 | |
|   of the zero.  (Fixed by Mark T. Dickinson; :issue:`1507`.)
 | |
| 
 | |
| * Classes that inherit a :meth:`__hash__` method from a parent class
 | |
|   can set ``__hash__ = None`` to indicate that the class isn't
 | |
|   hashable.  This will make ``hash(obj)`` raise a :exc:`TypeError`
 | |
|   and the class will not be indicated as implementing the
 | |
|   :class:`Hashable` ABC.
 | |
| 
 | |
|   You should do this when you've defined a :meth:`__cmp__` or
 | |
|   :meth:`__eq__` method that compares objects by their value rather
 | |
|   than by identity.  All objects have a default hash method that uses
 | |
|   ``id(obj)`` as the hash value.  There's no tidy way to remove the
 | |
|   :meth:`__hash__` method inherited from a parent class, so
 | |
|   assigning ``None`` was implemented as an override.  At the
 | |
|   C level, extensions can set ``tp_hash`` to
 | |
|   :c:func:`PyObject_HashNotImplemented`.
 | |
|   (Fixed by Nick Coghlan and Amaury Forgeot d'Arc; :issue:`2235`.)
 | |
| 
 | |
| * The :exc:`GeneratorExit` exception now subclasses
 | |
|   :exc:`BaseException` instead of :exc:`Exception`.  This means
 | |
|   that an exception handler that does ``except Exception:``
 | |
|   will not inadvertently catch :exc:`GeneratorExit`.
 | |
|   (Contributed by Chad Austin; :issue:`1537`.)
 | |
| 
 | |
| * Generator objects now have a :attr:`gi_code` attribute that refers to
 | |
|   the original code object backing the generator.
 | |
|   (Contributed by Collin Winter; :issue:`1473257`.)
 | |
| 
 | |
| * The :func:`compile` built-in function now accepts keyword arguments
 | |
|   as well as positional parameters.  (Contributed by Thomas Wouters;
 | |
|   :issue:`1444529`.)
 | |
| 
 | |
| * The :func:`complex` constructor now accepts strings containing
 | |
|   parenthesized complex numbers, meaning that ``complex(repr(cplx))``
 | |
|   will now round-trip values.  For example, ``complex('(3+4j)')``
 | |
|   now returns the value (3+4j).  (:issue:`1491866`)
 | |
| 
 | |
| * The string :meth:`translate` method now accepts ``None`` as the
 | |
|   translation table parameter, which is treated as the identity
 | |
|   transformation.   This makes it easier to carry out operations
 | |
|   that only delete characters.  (Contributed by Bengt Richter and
 | |
|   implemented by Raymond Hettinger; :issue:`1193128`.)
 | |
| 
 | |
| * The built-in :func:`dir` function now checks for a :meth:`__dir__`
 | |
|   method on the objects it receives.  This method must return a list
 | |
|   of strings containing the names of valid attributes for the object,
 | |
|   and lets the object control the value that :func:`dir` produces.
 | |
|   Objects that have :meth:`__getattr__` or :meth:`__getattribute__`
 | |
|   methods can use this to advertise pseudo-attributes they will honor.
 | |
|   (:issue:`1591665`)
 | |
| 
 | |
| * Instance method objects have new attributes for the object and function
 | |
|   comprising the method; the new synonym for :attr:`im_self` is
 | |
|   :attr:`__self__`, and :attr:`im_func` is also available as :attr:`__func__`.
 | |
|   The old names are still supported in Python 2.6, but are gone in 3.0.
 | |
| 
 | |
| * An obscure change: when you use the :func:`locals` function inside a
 | |
|   :keyword:`class` statement, the resulting dictionary no longer returns free
 | |
|   variables.  (Free variables, in this case, are variables referenced in the
 | |
|   :keyword:`!class` statement  that aren't attributes of the class.)
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| 
 | |
| Optimizations
 | |
| -------------
 | |
| 
 | |
| * The :mod:`warnings` module has been rewritten in C.  This makes
 | |
|   it possible to invoke warnings from the parser, and may also
 | |
|   make the interpreter's startup faster.
 | |
|   (Contributed by Neal Norwitz and Brett Cannon; :issue:`1631171`.)
 | |
| 
 | |
| * Type objects now have a cache of methods that can reduce
 | |
|   the work required to find the correct method implementation
 | |
|   for a particular class; once cached, the interpreter doesn't need to
 | |
|   traverse base classes to figure out the right method to call.
 | |
|   The cache is cleared if a base class or the class itself is modified,
 | |
|   so the cache should remain correct even in the face of Python's dynamic
 | |
|   nature.
 | |
|   (Original optimization implemented by Armin Rigo, updated for
 | |
|   Python 2.6 by Kevin Jacobs; :issue:`1700288`.)
 | |
| 
 | |
|   By default, this change is only applied to types that are included with
 | |
|   the Python core.  Extension modules may not necessarily be compatible with
 | |
|   this cache,
 | |
|   so they must explicitly add :c:macro:`Py_TPFLAGS_HAVE_VERSION_TAG`
 | |
|   to the module's ``tp_flags`` field to enable the method cache.
 | |
|   (To be compatible with the method cache, the extension module's code
 | |
|   must not directly access and modify the ``tp_dict`` member of
 | |
|   any of the types it implements.  Most modules don't do this,
 | |
|   but it's impossible for the Python interpreter to determine that.
 | |
|   See :issue:`1878` for some discussion.)
 | |
| 
 | |
| * Function calls that use keyword arguments are significantly faster
 | |
|   by doing a quick pointer comparison, usually saving the time of a
 | |
|   full string comparison.  (Contributed by Raymond Hettinger, after an
 | |
|   initial implementation by Antoine Pitrou; :issue:`1819`.)
 | |
| 
 | |
| * All of the functions in the :mod:`struct` module have been rewritten in
 | |
|   C, thanks to work at the Need For Speed sprint.
 | |
|   (Contributed by Raymond Hettinger.)
 | |
| 
 | |
| * Some of the standard built-in types now set a bit in their type
 | |
|   objects.  This speeds up checking whether an object is a subclass of
 | |
|   one of these types.  (Contributed by Neal Norwitz.)
 | |
| 
 | |
| * Unicode strings now use faster code for detecting
 | |
|   whitespace and line breaks; this speeds up the :meth:`split` method
 | |
|   by about 25% and :meth:`splitlines` by 35%.
 | |
|   (Contributed by Antoine Pitrou.)  Memory usage is reduced
 | |
|   by using pymalloc for the Unicode string's data.
 | |
| 
 | |
| * The ``with`` statement now stores the :meth:`__exit__` method on the stack,
 | |
|   producing a small speedup.  (Implemented by Jeffrey Yasskin.)
 | |
| 
 | |
| * To reduce memory usage, the garbage collector will now clear internal
 | |
|   free lists when garbage-collecting the highest generation of objects.
 | |
|   This may return memory to the operating system sooner.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| .. _new-26-interpreter:
 | |
| 
 | |
| Interpreter Changes
 | |
| -------------------------------
 | |
| 
 | |
| Two command-line options have been reserved for use by other Python
 | |
| implementations.  The :option:`-J` switch has been reserved for use by
 | |
| Jython for Jython-specific options, such as switches that are passed to
 | |
| the underlying JVM.  :option:`-X` has been reserved for options
 | |
| specific to a particular implementation of Python such as CPython,
 | |
| Jython, or IronPython.  If either option is used with Python 2.6, the
 | |
| interpreter will report that the option isn't currently used.
 | |
| 
 | |
| Python can now be prevented from writing :file:`.pyc` or :file:`.pyo`
 | |
| files by supplying the :option:`-B` switch to the Python interpreter,
 | |
| or by setting the :envvar:`PYTHONDONTWRITEBYTECODE` environment
 | |
| variable before running the interpreter.  This setting is available to
 | |
| Python programs as the ``sys.dont_write_bytecode`` variable, and
 | |
| Python code can change the value to modify the interpreter's
 | |
| behaviour.  (Contributed by Neal Norwitz and Georg Brandl.)
 | |
| 
 | |
| The encoding used for standard input, output, and standard error can
 | |
| be specified by setting the :envvar:`PYTHONIOENCODING` environment
 | |
| variable before running the interpreter.  The value should be a string
 | |
| in the form ``<encoding>`` or ``<encoding>:<errorhandler>``.
 | |
| The *encoding* part specifies the encoding's name, e.g. ``utf-8`` or
 | |
| ``latin-1``; the optional *errorhandler* part specifies
 | |
| what to do with characters that can't be handled by the encoding,
 | |
| and  should be one of "error", "ignore", or "replace".   (Contributed
 | |
| by Martin von Löwis.)
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| New and Improved Modules
 | |
| ========================
 | |
| 
 | |
| As in every release, 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 :mod:`asyncore` and :mod:`asynchat` modules are
 | |
|   being actively maintained again, and a number of patches and bugfixes
 | |
|   were applied.  (Maintained by Josiah Carlson; see :issue:`1736190` for
 | |
|   one patch.)
 | |
| 
 | |
| * The :mod:`bsddb` module also has a new maintainer, Jesús Cea Avión, and the package
 | |
|   is now available as a standalone package.  The web page for the package is
 | |
|   `www.jcea.es/programacion/pybsddb.htm
 | |
|   <https://www.jcea.es/programacion/pybsddb.htm>`__.
 | |
|   The plan is to remove the package from the standard library
 | |
|   in Python 3.0, because its pace of releases is much more frequent than
 | |
|   Python's.
 | |
| 
 | |
|   The :mod:`bsddb.dbshelve` module now uses the highest pickling protocol
 | |
|   available, instead of restricting itself to protocol 1.
 | |
|   (Contributed by W. Barnes.)
 | |
| 
 | |
| * The :mod:`cgi` module will now read variables from the query string
 | |
|   of an HTTP POST request.  This makes it possible to use form actions
 | |
|   with URLs that include query strings such as
 | |
|   "/cgi-bin/add.py?category=1".  (Contributed by Alexandre Fiori and
 | |
|   Nubis; :issue:`1817`.)
 | |
| 
 | |
|   The :func:`parse_qs` and :func:`parse_qsl` functions have been
 | |
|   relocated from the :mod:`cgi` module to the :mod:`urlparse` module.
 | |
|   The versions still available in the :mod:`cgi` module will
 | |
|   trigger :exc:`PendingDeprecationWarning` messages in 2.6
 | |
|   (:issue:`600362`).
 | |
| 
 | |
| * The :mod:`cmath` module underwent extensive revision,
 | |
|   contributed by Mark Dickinson and Christian Heimes.
 | |
|   Five new functions were added:
 | |
| 
 | |
|   * :func:`polar` converts a complex number to polar form, returning
 | |
|     the modulus and argument of the complex number.
 | |
| 
 | |
|   * :func:`rect` does the opposite, turning a modulus, argument pair
 | |
|     back into the corresponding complex number.
 | |
| 
 | |
|   * :func:`phase` returns the argument (also called the angle) of a complex
 | |
|     number.
 | |
| 
 | |
|   * :func:`isnan` returns True if either
 | |
|     the real or imaginary part of its argument is a NaN.
 | |
| 
 | |
|   * :func:`isinf` returns True if either the real or imaginary part of
 | |
|     its argument is infinite.
 | |
| 
 | |
|   The revisions also improved the numerical soundness of the
 | |
|   :mod:`cmath` module.  For all functions, the real and imaginary
 | |
|   parts of the results are accurate to within a few units of least
 | |
|   precision (ulps) whenever possible.  See :issue:`1381` for the
 | |
|   details.  The branch cuts for :func:`asinh`, :func:`atanh`: and
 | |
|   :func:`atan` have also been corrected.
 | |
| 
 | |
|   The tests for the module have been greatly expanded; nearly 2000 new
 | |
|   test cases exercise the algebraic functions.
 | |
| 
 | |
|   On IEEE 754 platforms, the :mod:`cmath` module now handles IEEE 754
 | |
|   special values and floating-point exceptions in a manner consistent
 | |
|   with Annex 'G' of the C99 standard.
 | |
| 
 | |
| * A new data type in the :mod:`collections` module: :class:`namedtuple(typename,
 | |
|   fieldnames)` is a factory function that creates subclasses of the standard tuple
 | |
|   whose fields are accessible by name as well as index.  For example::
 | |
| 
 | |
|      >>> var_type = collections.namedtuple('variable',
 | |
|      ...             'id name type size')
 | |
|      >>> # Names are separated by spaces or commas.
 | |
|      >>> # 'id, name, type, size' would also work.
 | |
|      >>> var_type._fields
 | |
|      ('id', 'name', 'type', 'size')
 | |
| 
 | |
|      >>> var = var_type(1, 'frequency', 'int', 4)
 | |
|      >>> print var[0], var.id    # Equivalent
 | |
|      1 1
 | |
|      >>> print var[2], var.type  # Equivalent
 | |
|      int int
 | |
|      >>> var._asdict()
 | |
|      {'size': 4, 'type': 'int', 'id': 1, 'name': 'frequency'}
 | |
|      >>> v2 = var._replace(name='amplitude')
 | |
|      >>> v2
 | |
|      variable(id=1, name='amplitude', type='int', size=4)
 | |
| 
 | |
|   Several places in the standard library that returned tuples have
 | |
|   been modified to return :class:`namedtuple` instances.  For example,
 | |
|   the :meth:`Decimal.as_tuple` method now returns a named tuple with
 | |
|   :attr:`sign`, :attr:`digits`, and :attr:`exponent` fields.
 | |
| 
 | |
|   (Contributed by Raymond Hettinger.)
 | |
| 
 | |
| * Another change to the :mod:`collections` module is that the
 | |
|   :class:`deque` type now supports an optional *maxlen* parameter;
 | |
|   if supplied, the deque's size will be restricted to no more
 | |
|   than *maxlen* items.  Adding more items to a full deque causes
 | |
|   old items to be discarded.
 | |
| 
 | |
|   ::
 | |
| 
 | |
|     >>> from collections import deque
 | |
|     >>> dq=deque(maxlen=3)
 | |
|     >>> dq
 | |
|     deque([], maxlen=3)
 | |
|     >>> dq.append(1); dq.append(2); dq.append(3)
 | |
|     >>> dq
 | |
|     deque([1, 2, 3], maxlen=3)
 | |
|     >>> dq.append(4)
 | |
|     >>> dq
 | |
|     deque([2, 3, 4], maxlen=3)
 | |
| 
 | |
|   (Contributed by Raymond Hettinger.)
 | |
| 
 | |
| * The :mod:`Cookie` module's :class:`Morsel` objects now support an
 | |
|   :attr:`httponly` attribute.  In some browsers. cookies with this attribute
 | |
|   set cannot be accessed or manipulated by JavaScript code.
 | |
|   (Contributed by Arvin Schnell; :issue:`1638033`.)
 | |
| 
 | |
| * A new window method in the :mod:`curses` module,
 | |
|   :meth:`chgat`, changes the display attributes for a certain number of
 | |
|   characters on a single line.  (Contributed by Fabian Kreutz.)
 | |
| 
 | |
|   ::
 | |
| 
 | |
|      # Boldface text starting at y=0,x=21
 | |
|      # and affecting the rest of the line.
 | |
|      stdscr.chgat(0, 21, curses.A_BOLD)
 | |
| 
 | |
|   The :class:`Textbox` class in the :mod:`curses.textpad` module
 | |
|   now supports editing in insert mode as well as overwrite mode.
 | |
|   Insert mode is enabled by supplying a true value for the *insert_mode*
 | |
|   parameter when creating the :class:`Textbox` instance.
 | |
| 
 | |
| * The :mod:`datetime` module's :meth:`strftime` methods now support a
 | |
|   ``%f`` format code that expands to the number of microseconds in the
 | |
|   object, zero-padded on
 | |
|   the left to six places.  (Contributed by Skip Montanaro; :issue:`1158`.)
 | |
| 
 | |
| * The :mod:`decimal` module was updated to version 1.66 of
 | |
|   `the General Decimal Specification <http://speleotrove.com/decimal/decarith.html>`__.  New features
 | |
|   include some methods for some basic mathematical functions such as
 | |
|   :meth:`exp` and :meth:`log10`::
 | |
| 
 | |
|     >>> Decimal(1).exp()
 | |
|     Decimal("2.718281828459045235360287471")
 | |
|     >>> Decimal("2.7182818").ln()
 | |
|     Decimal("0.9999999895305022877376682436")
 | |
|     >>> Decimal(1000).log10()
 | |
|     Decimal("3")
 | |
| 
 | |
|   The :meth:`as_tuple` method of :class:`Decimal` objects now returns a
 | |
|   named tuple with :attr:`sign`, :attr:`digits`, and :attr:`exponent` fields.
 | |
| 
 | |
|   (Implemented by Facundo Batista and Mark Dickinson.  Named tuple
 | |
|   support added by Raymond Hettinger.)
 | |
| 
 | |
| * The :mod:`difflib` module's :class:`SequenceMatcher` class
 | |
|   now returns named tuples representing matches,
 | |
|   with :attr:`a`, :attr:`b`, and :attr:`size` attributes.
 | |
|   (Contributed by Raymond Hettinger.)
 | |
| 
 | |
| * An optional ``timeout`` parameter, specifying a timeout measured in
 | |
|   seconds, was added to the :class:`ftplib.FTP` class constructor as
 | |
|   well as the :meth:`connect` method.  (Added by Facundo Batista.)
 | |
|   Also, the :class:`FTP` class's :meth:`storbinary` and
 | |
|   :meth:`storlines` now take an optional *callback* parameter that
 | |
|   will be called with each block of data after the data has been sent.
 | |
|   (Contributed by Phil Schwartz; :issue:`1221598`.)
 | |
| 
 | |
| * The :func:`reduce` built-in function is also available in the
 | |
|   :mod:`functools` module.  In Python 3.0, the builtin has been
 | |
|   dropped and :func:`reduce` is only available from :mod:`functools`;
 | |
|   currently there are no plans to drop the builtin in the 2.x series.
 | |
|   (Patched by Christian Heimes; :issue:`1739906`.)
 | |
| 
 | |
| * When possible, the :mod:`getpass` module will now use
 | |
|   :file:`/dev/tty` to print a prompt message and read the password,
 | |
|   falling back to standard error and standard input.  If the
 | |
|   password may be echoed to the terminal, a warning is printed before
 | |
|   the prompt is displayed.  (Contributed by Gregory P. Smith.)
 | |
| 
 | |
| * The :func:`glob.glob` function can now return Unicode filenames if
 | |
|   a Unicode path was used and Unicode filenames are matched within the
 | |
|   directory.  (:issue:`1001604`)
 | |
| 
 | |
| * A new function in the :mod:`heapq` module, ``merge(iter1, iter2, ...)``,
 | |
|   takes any number of iterables returning data in sorted
 | |
|   order, and returns a new generator that returns the contents of all
 | |
|   the iterators, also in sorted order.  For example::
 | |
| 
 | |
|       >>> list(heapq.merge([1, 3, 5, 9], [2, 8, 16]))
 | |
|       [1, 2, 3, 5, 8, 9, 16]
 | |
| 
 | |
|   Another new function, ``heappushpop(heap, item)``,
 | |
|   pushes *item* onto *heap*, then pops off and returns the smallest item.
 | |
|   This is more efficient than making a call to :func:`heappush` and then
 | |
|   :func:`heappop`.
 | |
| 
 | |
|   :mod:`heapq` is now implemented to only use less-than comparison,
 | |
|   instead of the less-than-or-equal comparison it previously used.
 | |
|   This makes :mod:`heapq`'s usage of a type match the
 | |
|   :meth:`list.sort` method.
 | |
|   (Contributed by Raymond Hettinger.)
 | |
| 
 | |
| * An optional ``timeout`` parameter, specifying a timeout measured in
 | |
|   seconds, was added to the :class:`httplib.HTTPConnection` and
 | |
|   :class:`HTTPSConnection` class constructors.  (Added by Facundo
 | |
|   Batista.)
 | |
| 
 | |
| * Most of the :mod:`inspect` module's functions, such as
 | |
|   :func:`getmoduleinfo` and :func:`getargs`, now return named tuples.
 | |
|   In addition to behaving like tuples, the elements of the  return value
 | |
|   can also be accessed as attributes.
 | |
|   (Contributed by Raymond Hettinger.)
 | |
| 
 | |
|   Some new functions in the module include
 | |
|   :func:`isgenerator`, :func:`isgeneratorfunction`,
 | |
|   and :func:`isabstract`.
 | |
| 
 | |
| * The :mod:`itertools` module gained several new functions.
 | |
| 
 | |
|   ``izip_longest(iter1, iter2, ...[, fillvalue])`` makes tuples from
 | |
|   each of the elements; if some of the iterables are shorter than
 | |
|   others, the missing values are set to *fillvalue*.  For example::
 | |
| 
 | |
|      >>> tuple(itertools.izip_longest([1,2,3], [1,2,3,4,5]))
 | |
|      ((1, 1), (2, 2), (3, 3), (None, 4), (None, 5))
 | |
| 
 | |
|   ``product(iter1, iter2, ..., [repeat=N])`` returns the Cartesian product
 | |
|   of the supplied iterables, a set of tuples containing
 | |
|   every possible combination of the elements returned from each iterable. ::
 | |
| 
 | |
|      >>> list(itertools.product([1,2,3], [4,5,6]))
 | |
|      [(1, 4), (1, 5), (1, 6),
 | |
|       (2, 4), (2, 5), (2, 6),
 | |
|       (3, 4), (3, 5), (3, 6)]
 | |
| 
 | |
|   The optional *repeat* keyword argument is used for taking the
 | |
|   product of an iterable or a set of iterables with themselves,
 | |
|   repeated *N* times.  With a single iterable argument, *N*-tuples
 | |
|   are returned::
 | |
| 
 | |
|      >>> list(itertools.product([1,2], repeat=3))
 | |
|      [(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2),
 | |
|       (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)]
 | |
| 
 | |
|   With two iterables, *2N*-tuples are returned. ::
 | |
| 
 | |
|      >>> list(itertools.product([1,2], [3,4], repeat=2))
 | |
|      [(1, 3, 1, 3), (1, 3, 1, 4), (1, 3, 2, 3), (1, 3, 2, 4),
 | |
|       (1, 4, 1, 3), (1, 4, 1, 4), (1, 4, 2, 3), (1, 4, 2, 4),
 | |
|       (2, 3, 1, 3), (2, 3, 1, 4), (2, 3, 2, 3), (2, 3, 2, 4),
 | |
|       (2, 4, 1, 3), (2, 4, 1, 4), (2, 4, 2, 3), (2, 4, 2, 4)]
 | |
| 
 | |
|   ``combinations(iterable, r)`` returns sub-sequences of length *r* from
 | |
|   the elements of *iterable*. ::
 | |
| 
 | |
|     >>> list(itertools.combinations('123', 2))
 | |
|     [('1', '2'), ('1', '3'), ('2', '3')]
 | |
|     >>> list(itertools.combinations('123', 3))
 | |
|     [('1', '2', '3')]
 | |
|     >>> list(itertools.combinations('1234', 3))
 | |
|     [('1', '2', '3'), ('1', '2', '4'),
 | |
|      ('1', '3', '4'), ('2', '3', '4')]
 | |
| 
 | |
|   ``permutations(iter[, r])`` returns all the permutations of length *r* of
 | |
|   the iterable's elements.  If *r* is not specified, it will default to the
 | |
|   number of elements produced by the iterable. ::
 | |
| 
 | |
|     >>> list(itertools.permutations([1,2,3,4], 2))
 | |
|     [(1, 2), (1, 3), (1, 4),
 | |
|      (2, 1), (2, 3), (2, 4),
 | |
|      (3, 1), (3, 2), (3, 4),
 | |
|      (4, 1), (4, 2), (4, 3)]
 | |
| 
 | |
|   ``itertools.chain(*iterables)`` is an existing function in
 | |
|   :mod:`itertools` that gained a new constructor in Python 2.6.
 | |
|   ``itertools.chain.from_iterable(iterable)`` takes a single
 | |
|   iterable that should return other iterables.  :func:`chain` will
 | |
|   then return all the elements of the first iterable, then
 | |
|   all the elements of the second, and so on. ::
 | |
| 
 | |
|     >>> list(itertools.chain.from_iterable([[1,2,3], [4,5,6]]))
 | |
|     [1, 2, 3, 4, 5, 6]
 | |
| 
 | |
|   (All contributed by Raymond Hettinger.)
 | |
| 
 | |
| * The :mod:`logging` module's :class:`FileHandler` class
 | |
|   and its subclasses :class:`WatchedFileHandler`, :class:`RotatingFileHandler`,
 | |
|   and :class:`TimedRotatingFileHandler` now
 | |
|   have an optional *delay* parameter to their constructors.  If *delay*
 | |
|   is true, opening of the log file is deferred until the first
 | |
|   :meth:`emit` call is made.  (Contributed by Vinay Sajip.)
 | |
| 
 | |
|   :class:`TimedRotatingFileHandler` also has a *utc* constructor
 | |
|   parameter.  If the argument is true, UTC time will be used
 | |
|   in determining when midnight occurs and in generating filenames;
 | |
|   otherwise local time will be used.
 | |
| 
 | |
| * Several new functions were added to the :mod:`math` module:
 | |
| 
 | |
|   * :func:`~math.isinf` and :func:`~math.isnan` determine whether a given float
 | |
|     is a (positive or negative) infinity or a NaN (Not a Number), respectively.
 | |
| 
 | |
|   * :func:`~math.copysign` copies the sign bit of an IEEE 754 number,
 | |
|     returning the absolute value of *x* combined with the sign bit of
 | |
|     *y*.  For example, ``math.copysign(1, -0.0)`` returns -1.0.
 | |
|     (Contributed by Christian Heimes.)
 | |
| 
 | |
|   * :func:`~math.factorial` computes the factorial of a number.
 | |
|     (Contributed by Raymond Hettinger; :issue:`2138`.)
 | |
| 
 | |
|   * :func:`~math.fsum` adds up the stream of numbers from an iterable,
 | |
|     and is careful to avoid loss of precision through using partial sums.
 | |
|     (Contributed by Jean Brouwers, Raymond Hettinger, and Mark Dickinson;
 | |
|     :issue:`2819`.)
 | |
| 
 | |
|   * :func:`~math.acosh`, :func:`~math.asinh`
 | |
|     and :func:`~math.atanh` compute the inverse hyperbolic functions.
 | |
| 
 | |
|   * :func:`~math.log1p` returns the natural logarithm of *1+x*
 | |
|     (base *e*).
 | |
| 
 | |
|   * :func:`trunc` rounds a number toward zero, returning the closest
 | |
|     :class:`Integral` that's between the function's argument and zero.
 | |
|     Added as part of the backport of
 | |
|     `PEP 3141's type hierarchy for numbers <#pep-3141>`__.
 | |
| 
 | |
| * The :mod:`math` module has been improved to give more consistent
 | |
|   behaviour across platforms, especially with respect to handling of
 | |
|   floating-point exceptions and IEEE 754 special values.
 | |
| 
 | |
|   Whenever possible, the module follows the recommendations of the C99
 | |
|   standard about 754's special values.  For example, ``sqrt(-1.)``
 | |
|   should now give a :exc:`ValueError` across almost all platforms,
 | |
|   while ``sqrt(float('NaN'))`` should return a NaN on all IEEE 754
 | |
|   platforms.  Where Annex 'F' of the C99 standard recommends signaling
 | |
|   'divide-by-zero' or 'invalid', Python will raise :exc:`ValueError`.
 | |
|   Where Annex 'F' of the C99 standard recommends signaling 'overflow',
 | |
|   Python will raise :exc:`OverflowError`.  (See :issue:`711019` and
 | |
|   :issue:`1640`.)
 | |
| 
 | |
|   (Contributed by Christian Heimes and Mark Dickinson.)
 | |
| 
 | |
| * :class:`~mmap.mmap` objects now have a :meth:`rfind` method that searches for a
 | |
|   substring beginning at the end of the string and searching
 | |
|   backwards.  The :meth:`find` method also gained an *end* parameter
 | |
|   giving an index at which to stop searching.
 | |
|   (Contributed by John Lenton.)
 | |
| 
 | |
| * The :mod:`operator` module gained a
 | |
|   :func:`methodcaller` function that takes a name and an optional
 | |
|   set of arguments, returning a callable that will call
 | |
|   the named function on any arguments passed to it.  For example::
 | |
| 
 | |
|     >>> # Equivalent to lambda s: s.replace('old', 'new')
 | |
|     >>> replacer = operator.methodcaller('replace', 'old', 'new')
 | |
|     >>> replacer('old wine in old bottles')
 | |
|     'new wine in new bottles'
 | |
| 
 | |
|   (Contributed by Georg Brandl, after a suggestion by Gregory Petrosyan.)
 | |
| 
 | |
|   The :func:`attrgetter` function now accepts dotted names and performs
 | |
|   the corresponding attribute lookups::
 | |
| 
 | |
|     >>> inst_name = operator.attrgetter(
 | |
|     ...        '__class__.__name__')
 | |
|     >>> inst_name('')
 | |
|     'str'
 | |
|     >>> inst_name(help)
 | |
|     '_Helper'
 | |
| 
 | |
|   (Contributed by Georg Brandl, after a suggestion by Barry Warsaw.)
 | |
| 
 | |
| * The :mod:`os` module now wraps several new system calls.
 | |
|   ``fchmod(fd, mode)`` and ``fchown(fd, uid, gid)`` change the mode
 | |
|   and ownership of an opened file, and ``lchmod(path, mode)`` changes
 | |
|   the mode of a symlink.  (Contributed by Georg Brandl and Christian
 | |
|   Heimes.)
 | |
| 
 | |
|   :func:`chflags` and :func:`lchflags` are wrappers for the
 | |
|   corresponding system calls (where they're available), changing the
 | |
|   flags set on a file.  Constants for the flag values are defined in
 | |
|   the :mod:`stat` module; some possible values include
 | |
|   :const:`UF_IMMUTABLE` to signal the file may not be changed and
 | |
|   :const:`UF_APPEND` to indicate that data can only be appended to the
 | |
|   file.  (Contributed by M. Levinson.)
 | |
| 
 | |
|   ``os.closerange(low, high)`` efficiently closes all file descriptors
 | |
|   from *low* to *high*, ignoring any errors and not including *high* itself.
 | |
|   This function is now used by the :mod:`subprocess` module to make starting
 | |
|   processes faster.  (Contributed by Georg Brandl; :issue:`1663329`.)
 | |
| 
 | |
| * The ``os.environ`` object's :meth:`clear` method will now unset the
 | |
|   environment variables using :func:`os.unsetenv` in addition to clearing
 | |
|   the object's keys.  (Contributed by Martin Horcicka; :issue:`1181`.)
 | |
| 
 | |
| * The :func:`os.walk` function now has a ``followlinks`` parameter. If
 | |
|   set to True, it will follow symlinks pointing to directories and
 | |
|   visit the directory's contents.  For backward compatibility, the
 | |
|   parameter's default value is false.  Note that the function can fall
 | |
|   into an infinite recursion if there's a symlink that points to a
 | |
|   parent directory.  (:issue:`1273829`)
 | |
| 
 | |
| * In the :mod:`os.path` module, the :func:`splitext` function
 | |
|   has been changed to not split on leading period characters.
 | |
|   This produces better results when operating on Unix's dot-files.
 | |
|   For example, ``os.path.splitext('.ipython')``
 | |
|   now returns ``('.ipython', '')`` instead of ``('', '.ipython')``.
 | |
|   (:issue:`1115886`)
 | |
| 
 | |
|   A new function, ``os.path.relpath(path, start='.')``, returns a relative path
 | |
|   from the ``start`` path, if it's supplied, or from the current
 | |
|   working directory to the destination ``path``.  (Contributed by
 | |
|   Richard Barran; :issue:`1339796`.)
 | |
| 
 | |
|   On Windows, :func:`os.path.expandvars` will now expand environment variables
 | |
|   given in the form "%var%", and "~user" will be expanded into the
 | |
|   user's home directory path.  (Contributed by Josiah Carlson;
 | |
|   :issue:`957650`.)
 | |
| 
 | |
| * The Python debugger provided by the :mod:`pdb` module
 | |
|   gained a new command: "run" restarts the Python program being debugged
 | |
|   and can optionally take new command-line arguments for the program.
 | |
|   (Contributed by Rocky Bernstein; :issue:`1393667`.)
 | |
| 
 | |
| * The :func:`pdb.post_mortem` function, used to begin debugging a
 | |
|   traceback, will now use the traceback returned by :func:`sys.exc_info`
 | |
|   if no traceback is supplied.   (Contributed by Facundo Batista;
 | |
|   :issue:`1106316`.)
 | |
| 
 | |
| * The :mod:`pickletools` module now has an :func:`optimize` function
 | |
|   that takes a string containing a pickle and removes some unused
 | |
|   opcodes, returning a shorter pickle that contains the same data structure.
 | |
|   (Contributed by Raymond Hettinger.)
 | |
| 
 | |
| * A :func:`get_data` function was added to the :mod:`pkgutil`
 | |
|   module that returns the contents of resource files included
 | |
|   with an installed Python package.  For example::
 | |
| 
 | |
|     >>> import pkgutil
 | |
|     >>> print pkgutil.get_data('test', 'exception_hierarchy.txt')
 | |
|     BaseException
 | |
|      +-- SystemExit
 | |
|      +-- KeyboardInterrupt
 | |
|      +-- GeneratorExit
 | |
|      +-- Exception
 | |
|           +-- StopIteration
 | |
|           +-- StandardError
 | |
|      ...
 | |
| 
 | |
|   (Contributed by Paul Moore; :issue:`2439`.)
 | |
| 
 | |
| * The :mod:`pyexpat` module's :class:`Parser` objects now allow setting
 | |
|   their :attr:`buffer_size` attribute to change the size of the buffer
 | |
|   used to hold character data.
 | |
|   (Contributed by Achim Gaedke; :issue:`1137`.)
 | |
| 
 | |
| * The :mod:`Queue` module now provides queue variants that retrieve entries
 | |
|   in different orders.  The :class:`PriorityQueue` class stores
 | |
|   queued items in a heap and retrieves them in priority order,
 | |
|   and :class:`LifoQueue` retrieves the most recently added entries first,
 | |
|   meaning that it behaves like a stack.
 | |
|   (Contributed by Raymond Hettinger.)
 | |
| 
 | |
| * The :mod:`random` module's :class:`Random` objects can
 | |
|   now be pickled on a 32-bit system and unpickled on a 64-bit
 | |
|   system, and vice versa.  Unfortunately, this change also means
 | |
|   that Python 2.6's :class:`Random` objects can't be unpickled correctly
 | |
|   on earlier versions of Python.
 | |
|   (Contributed by Shawn Ligocki; :issue:`1727780`.)
 | |
| 
 | |
|   The new ``triangular(low, high, mode)`` function returns random
 | |
|   numbers following a triangular distribution.   The returned values
 | |
|   are between *low* and *high*, not including *high* itself, and
 | |
|   with *mode* as the most frequently occurring value
 | |
|   in the distribution.  (Contributed by Wladmir van der Laan and
 | |
|   Raymond Hettinger; :issue:`1681432`.)
 | |
| 
 | |
| * Long regular expression searches carried out by the  :mod:`re`
 | |
|   module will check for signals being delivered, so
 | |
|   time-consuming searches can now be interrupted.
 | |
|   (Contributed by Josh Hoyt and Ralf Schmitt; :issue:`846388`.)
 | |
| 
 | |
|   The regular expression module is implemented by compiling bytecodes
 | |
|   for a tiny regex-specific virtual machine.  Untrusted code
 | |
|   could create malicious strings of bytecode directly and cause crashes,
 | |
|   so Python 2.6 includes a verifier for the regex bytecode.
 | |
|   (Contributed by Guido van Rossum from work for Google App Engine;
 | |
|   :issue:`3487`.)
 | |
| 
 | |
| * The :mod:`rlcompleter` module's :meth:`Completer.complete()` method
 | |
|   will now ignore exceptions triggered while evaluating a name.
 | |
|   (Fixed by Lorenz Quack; :issue:`2250`.)
 | |
| 
 | |
| * The :mod:`sched` module's :class:`scheduler` instances now
 | |
|   have a read-only :attr:`queue` attribute that returns the
 | |
|   contents of the scheduler's queue, represented as a list of
 | |
|   named tuples with the fields ``(time, priority, action, argument)``.
 | |
|   (Contributed by Raymond Hettinger; :issue:`1861`.)
 | |
| 
 | |
| * The :mod:`select` module now has wrapper functions
 | |
|   for the Linux :c:func:`epoll` and BSD :c:func:`kqueue` system calls.
 | |
|   :meth:`modify` method was added to the existing :class:`poll`
 | |
|   objects; ``pollobj.modify(fd, eventmask)`` takes a file descriptor
 | |
|   or file object and an event mask, modifying the recorded event mask
 | |
|   for that file.
 | |
|   (Contributed by Christian Heimes; :issue:`1657`.)
 | |
| 
 | |
| * The :func:`shutil.copytree` function now has an optional *ignore* argument
 | |
|   that takes a callable object.  This callable will receive each directory path
 | |
|   and a list of the directory's contents, and returns a list of names that
 | |
|   will be ignored, not copied.
 | |
| 
 | |
|   The :mod:`shutil` module also provides an :func:`ignore_patterns`
 | |
|   function for use with this new parameter.  :func:`ignore_patterns`
 | |
|   takes an arbitrary number of glob-style patterns and returns a
 | |
|   callable that will ignore any files and directories that match any
 | |
|   of these patterns.  The following example copies a directory tree,
 | |
|   but skips both :file:`.svn` directories and Emacs backup files,
 | |
|   which have names ending with '~'::
 | |
| 
 | |
|       shutil.copytree('Doc/library', '/tmp/library',
 | |
|                       ignore=shutil.ignore_patterns('*~', '.svn'))
 | |
| 
 | |
|   (Contributed by Tarek Ziadé; :issue:`2663`.)
 | |
| 
 | |
| * Integrating signal handling with GUI handling event loops
 | |
|   like those used by Tkinter or GTk+ has long been a problem; most
 | |
|   software ends up polling, waking up every fraction of a second to check
 | |
|   if any GUI events have occurred.
 | |
|   The :mod:`signal` module can now make this more efficient.
 | |
|   Calling ``signal.set_wakeup_fd(fd)`` sets a file descriptor
 | |
|   to be used; when a signal is received, a byte is written to that
 | |
|   file descriptor.  There's also a C-level function,
 | |
|   :c:func:`PySignal_SetWakeupFd`, for setting the descriptor.
 | |
| 
 | |
|   Event loops will use this by opening a pipe to create two descriptors,
 | |
|   one for reading and one for writing.  The writable descriptor
 | |
|   will be passed to :func:`set_wakeup_fd`, and the readable descriptor
 | |
|   will be added to the list of descriptors monitored by the event loop via
 | |
|   :c:func:`select` or :c:func:`poll`.
 | |
|   On receiving a signal, a byte will be written and the main event loop
 | |
|   will be woken up, avoiding the need to poll.
 | |
| 
 | |
|   (Contributed by Adam Olsen; :issue:`1583`.)
 | |
| 
 | |
|   The :func:`siginterrupt` function is now available from Python code,
 | |
|   and allows changing whether signals can interrupt system calls or not.
 | |
|   (Contributed by Ralf Schmitt.)
 | |
| 
 | |
|   The :func:`setitimer` and :func:`getitimer` functions have also been
 | |
|   added (where they're available).  :func:`setitimer`
 | |
|   allows setting interval timers that will cause a signal to be
 | |
|   delivered to the process after a specified time, measured in
 | |
|   wall-clock time, consumed process time, or combined process+system
 | |
|   time.  (Contributed by Guilherme Polo; :issue:`2240`.)
 | |
| 
 | |
| * The :mod:`smtplib` module now supports SMTP over SSL thanks to the
 | |
|   addition of the :class:`SMTP_SSL` class. This class supports an
 | |
|   interface identical to the existing :class:`SMTP` class.
 | |
|   (Contributed by Monty Taylor.)  Both class constructors also have an
 | |
|   optional ``timeout`` parameter that specifies a timeout for the
 | |
|   initial connection attempt, measured in seconds.  (Contributed by
 | |
|   Facundo Batista.)
 | |
| 
 | |
|   An implementation of the LMTP protocol (:rfc:`2033`) was also added
 | |
|   to the module.  LMTP is used in place of SMTP when transferring
 | |
|   e-mail between agents that don't manage a mail queue.  (LMTP
 | |
|   implemented by Leif Hedstrom; :issue:`957003`.)
 | |
| 
 | |
|   :meth:`SMTP.starttls` now complies with :rfc:`3207` and forgets any
 | |
|   knowledge obtained from the server not obtained from the TLS
 | |
|   negotiation itself.  (Patch contributed by Bill Fenner;
 | |
|   :issue:`829951`.)
 | |
| 
 | |
| * The :mod:`socket` module now supports TIPC (http://tipc.sourceforge.net/),
 | |
|   a high-performance non-IP-based protocol designed for use in clustered
 | |
|   environments.  TIPC addresses are 4- or 5-tuples.
 | |
|   (Contributed by Alberto Bertogli; :issue:`1646`.)
 | |
| 
 | |
|   A new function, :func:`create_connection`, takes an address and
 | |
|   connects to it using an optional timeout value, returning the
 | |
|   connected socket object.  This function also looks up the address's
 | |
|   type and connects to it using IPv4 or IPv6 as appropriate.  Changing
 | |
|   your code to use :func:`create_connection` instead of
 | |
|   ``socket(socket.AF_INET, ...)`` may be all that's required to make
 | |
|   your code work with IPv6.
 | |
| 
 | |
| * The base classes in the :mod:`SocketServer` module now support
 | |
|   calling a :meth:`handle_timeout` method after a span of inactivity
 | |
|   specified by the server's :attr:`timeout` attribute.  (Contributed
 | |
|   by Michael Pomraning.)  The :meth:`serve_forever` method
 | |
|   now takes an optional poll interval measured in seconds,
 | |
|   controlling how often the server will check for a shutdown request.
 | |
|   (Contributed by Pedro Werneck and Jeffrey Yasskin;
 | |
|   :issue:`742598`, :issue:`1193577`.)
 | |
| 
 | |
| * The :mod:`sqlite3` module, maintained by Gerhard Häring,
 | |
|   has been updated from version 2.3.2 in Python 2.5 to
 | |
|   version 2.4.1.
 | |
| 
 | |
| * The :mod:`struct` module now supports the C99 :c:type:`_Bool` type,
 | |
|   using the format character ``'?'``.
 | |
|   (Contributed by David Remahl.)
 | |
| 
 | |
| * The :class:`Popen` objects provided by the :mod:`subprocess` module
 | |
|   now have :meth:`terminate`, :meth:`kill`, and :meth:`send_signal` methods.
 | |
|   On Windows, :meth:`send_signal` only supports the :const:`SIGTERM`
 | |
|   signal, and all these methods are aliases for the Win32 API function
 | |
|   :c:func:`TerminateProcess`.
 | |
|   (Contributed by Christian Heimes.)
 | |
| 
 | |
| * A new variable in the :mod:`sys` module, :attr:`float_info`, is an
 | |
|   object containing information derived from the :file:`float.h` file
 | |
|   about the platform's floating-point support.  Attributes of this
 | |
|   object include :attr:`mant_dig` (number of digits in the mantissa),
 | |
|   :attr:`epsilon` (smallest difference between 1.0 and the next
 | |
|   largest value representable), and several others.  (Contributed by
 | |
|   Christian Heimes; :issue:`1534`.)
 | |
| 
 | |
|   Another new variable, :attr:`dont_write_bytecode`, controls whether Python
 | |
|   writes any :file:`.pyc` or :file:`.pyo` files on importing a module.
 | |
|   If this variable is true, the compiled files are not written.  The
 | |
|   variable is initially set on start-up by supplying the :option:`-B`
 | |
|   switch to the Python interpreter, or by setting the
 | |
|   :envvar:`PYTHONDONTWRITEBYTECODE` environment variable before
 | |
|   running the interpreter.  Python code can subsequently
 | |
|   change the value of this variable to control whether bytecode files
 | |
|   are written or not.
 | |
|   (Contributed by Neal Norwitz and Georg Brandl.)
 | |
| 
 | |
|   Information about the command-line arguments supplied to the Python
 | |
|   interpreter is available by reading attributes of a named
 | |
|   tuple available as ``sys.flags``.  For example, the :attr:`verbose`
 | |
|   attribute is true if Python
 | |
|   was executed in verbose mode, :attr:`debug` is true in debugging mode, etc.
 | |
|   These attributes are all read-only.
 | |
|   (Contributed by Christian Heimes.)
 | |
| 
 | |
|   A new function, :func:`getsizeof`, takes a Python object and returns
 | |
|   the amount of memory used by the object, measured in bytes.  Built-in
 | |
|   objects return correct results; third-party extensions may not,
 | |
|   but can define a :meth:`__sizeof__` method to return the
 | |
|   object's size.
 | |
|   (Contributed by Robert Schuppenies; :issue:`2898`.)
 | |
| 
 | |
|   It's now possible to determine the current profiler and tracer functions
 | |
|   by calling :func:`sys.getprofile` and :func:`sys.gettrace`.
 | |
|   (Contributed by Georg Brandl; :issue:`1648`.)
 | |
| 
 | |
| * The :mod:`tarfile` module now supports POSIX.1-2001 (pax) tarfiles in
 | |
|   addition to the POSIX.1-1988 (ustar) and GNU tar formats that were
 | |
|   already supported.  The default format is GNU tar; specify the
 | |
|   ``format`` parameter to open a file using a different format::
 | |
| 
 | |
|     tar = tarfile.open("output.tar", "w",
 | |
|                        format=tarfile.PAX_FORMAT)
 | |
| 
 | |
|   The new ``encoding`` and ``errors`` parameters specify an encoding and
 | |
|   an error handling scheme for character conversions.  ``'strict'``,
 | |
|   ``'ignore'``, and ``'replace'`` are the three standard ways Python can
 | |
|   handle errors,;
 | |
|   ``'utf-8'`` is a special value that replaces bad characters with
 | |
|   their UTF-8 representation.  (Character conversions occur because the
 | |
|   PAX format supports Unicode filenames, defaulting to UTF-8 encoding.)
 | |
| 
 | |
|   The :meth:`TarFile.add` method now accepts an ``exclude`` argument that's
 | |
|   a function that can be used to exclude certain filenames from
 | |
|   an archive.
 | |
|   The function must take a filename and return true if the file
 | |
|   should be excluded or false if it should be archived.
 | |
|   The function is applied to both the name initially passed to :meth:`add`
 | |
|   and to the names of files in recursively-added directories.
 | |
| 
 | |
|   (All changes contributed by Lars Gustäbel).
 | |
| 
 | |
| * An optional ``timeout`` parameter was added to the
 | |
|   :class:`telnetlib.Telnet` class constructor, specifying a timeout
 | |
|   measured in seconds.  (Added by Facundo Batista.)
 | |
| 
 | |
| * The :class:`tempfile.NamedTemporaryFile` class usually deletes
 | |
|   the temporary file it created when the file is closed.  This
 | |
|   behaviour can now be changed by passing ``delete=False`` to the
 | |
|   constructor.  (Contributed by Damien Miller; :issue:`1537850`.)
 | |
| 
 | |
|   A new class, :class:`SpooledTemporaryFile`, behaves like
 | |
|   a temporary file but stores its data in memory until a maximum size is
 | |
|   exceeded.  On reaching that limit, the contents will be written to
 | |
|   an on-disk temporary file.  (Contributed by Dustin J. Mitchell.)
 | |
| 
 | |
|   The :class:`NamedTemporaryFile` and :class:`SpooledTemporaryFile` classes
 | |
|   both work as context managers, so you can write
 | |
|   ``with tempfile.NamedTemporaryFile() as tmp: ...``.
 | |
|   (Contributed by Alexander Belopolsky; :issue:`2021`.)
 | |
| 
 | |
| * The :mod:`test.test_support` module gained a number
 | |
|   of context managers useful for writing tests.
 | |
|   :func:`EnvironmentVarGuard` is a
 | |
|   context manager that temporarily changes environment variables and
 | |
|   automatically restores them to their old values.
 | |
| 
 | |
|   Another context manager, :class:`TransientResource`, can surround calls
 | |
|   to resources that may or may not be available; it will catch and
 | |
|   ignore a specified list of exceptions.  For example,
 | |
|   a network test may ignore certain failures when connecting to an
 | |
|   external web site::
 | |
| 
 | |
|       with test_support.TransientResource(IOError,
 | |
|                                       errno=errno.ETIMEDOUT):
 | |
|           f = urllib.urlopen('https://sf.net')
 | |
|           ...
 | |
| 
 | |
|   Finally, :func:`check_warnings` resets the :mod:`warning` module's
 | |
|   warning filters and returns an object that will record all warning
 | |
|   messages triggered (:issue:`3781`)::
 | |
| 
 | |
|       with test_support.check_warnings() as wrec:
 | |
|           warnings.simplefilter("always")
 | |
|           # ... code that triggers a warning ...
 | |
|           assert str(wrec.message) == "function is outdated"
 | |
|           assert len(wrec.warnings) == 1, "Multiple warnings raised"
 | |
| 
 | |
|   (Contributed by Brett Cannon.)
 | |
| 
 | |
| * The :mod:`textwrap` module can now preserve existing whitespace
 | |
|   at the beginnings and ends of the newly-created lines
 | |
|   by specifying ``drop_whitespace=False``
 | |
|   as an argument::
 | |
| 
 | |
|     >>> S = """This  sentence  has a bunch   of
 | |
|     ...   extra   whitespace."""
 | |
|     >>> print textwrap.fill(S, width=15)
 | |
|     This  sentence
 | |
|     has a bunch
 | |
|     of    extra
 | |
|     whitespace.
 | |
|     >>> print textwrap.fill(S, drop_whitespace=False, width=15)
 | |
|     This  sentence
 | |
|       has a bunch
 | |
|        of    extra
 | |
|        whitespace.
 | |
|     >>>
 | |
| 
 | |
|   (Contributed by Dwayne Bailey; :issue:`1581073`.)
 | |
| 
 | |
| * The :mod:`threading` module API is being changed to use properties
 | |
|   such as :attr:`daemon` instead of :meth:`setDaemon` and
 | |
|   :meth:`isDaemon` methods, and some methods have been renamed to use
 | |
|   underscores instead of camel-case; for example, the
 | |
|   :meth:`activeCount` method is renamed to :meth:`active_count`.  Both
 | |
|   the 2.6 and 3.0 versions of the module support the same properties
 | |
|   and renamed methods, but don't remove the old methods.  No date has been set
 | |
|   for the deprecation of the old APIs in Python 3.x; the old APIs won't
 | |
|   be removed in any 2.x version.
 | |
|   (Carried out by several people, most notably Benjamin Peterson.)
 | |
| 
 | |
|   The :mod:`threading` module's :class:`Thread` objects
 | |
|   gained an :attr:`ident` property that returns the thread's
 | |
|   identifier, a nonzero integer.  (Contributed by Gregory P. Smith;
 | |
|   :issue:`2871`.)
 | |
| 
 | |
| * The :mod:`timeit` module now accepts callables as well as strings
 | |
|   for the statement being timed and for the setup code.
 | |
|   Two convenience functions were added for creating
 | |
|   :class:`Timer` instances:
 | |
|   ``repeat(stmt, setup, time, repeat, number)`` and
 | |
|   ``timeit(stmt, setup, time, number)`` create an instance and call
 | |
|   the corresponding method. (Contributed by Erik Demaine;
 | |
|   :issue:`1533909`.)
 | |
| 
 | |
| * The :mod:`Tkinter` module now accepts lists and tuples for options,
 | |
|   separating the elements by spaces before passing the resulting value to
 | |
|   Tcl/Tk.
 | |
|   (Contributed by Guilherme Polo; :issue:`2906`.)
 | |
| 
 | |
| * The :mod:`turtle` module for turtle graphics was greatly enhanced by
 | |
|   Gregor Lingl.  New features in the module include:
 | |
| 
 | |
|   * Better animation of turtle movement and rotation.
 | |
|   * Control over turtle movement using the new :meth:`delay`,
 | |
|     :meth:`tracer`, and :meth:`speed` methods.
 | |
|   * The ability to set new shapes for the turtle, and to
 | |
|     define a new coordinate system.
 | |
|   * Turtles now have an :meth:`undo()` method that can roll back actions.
 | |
|   * Simple support for reacting to input events such as mouse and keyboard
 | |
|     activity, making it possible to write simple games.
 | |
|   * A :file:`turtle.cfg` file can be used to customize the starting appearance
 | |
|     of the turtle's screen.
 | |
|   * The module's docstrings can be replaced by new docstrings that have been
 | |
|     translated into another language.
 | |
| 
 | |
|   (:issue:`1513695`)
 | |
| 
 | |
| * An optional ``timeout`` parameter was added to the
 | |
|   :func:`urllib.urlopen` function and the
 | |
|   :class:`urllib.ftpwrapper` class constructor, as well as the
 | |
|   :func:`urllib2.urlopen` function.  The parameter specifies a timeout
 | |
|   measured in seconds.   For example::
 | |
| 
 | |
|      >>> u = urllib2.urlopen("http://slow.example.com",
 | |
|                              timeout=3)
 | |
|      Traceback (most recent call last):
 | |
|        ...
 | |
|      urllib2.URLError: <urlopen error timed out>
 | |
|      >>>
 | |
| 
 | |
|   (Added by Facundo Batista.)
 | |
| 
 | |
| * The Unicode database provided by the :mod:`unicodedata` module
 | |
|   has been updated to version 5.1.0.  (Updated by
 | |
|   Martin von Löwis; :issue:`3811`.)
 | |
| 
 | |
| * The :mod:`warnings` module's :func:`formatwarning` and :func:`showwarning`
 | |
|   gained an optional *line* argument that can be used to supply the
 | |
|   line of source code.  (Added as part of :issue:`1631171`, which re-implemented
 | |
|   part of the :mod:`warnings` module in C code.)
 | |
| 
 | |
|   A new function, :func:`catch_warnings`, is a context manager
 | |
|   intended for testing purposes that lets you temporarily modify the
 | |
|   warning filters and then restore their original values (:issue:`3781`).
 | |
| 
 | |
| * The XML-RPC :class:`SimpleXMLRPCServer` and :class:`DocXMLRPCServer`
 | |
|   classes can now be prevented from immediately opening and binding to
 | |
|   their socket by passing ``False`` as the *bind_and_activate*
 | |
|   constructor parameter.  This can be used to modify the instance's
 | |
|   :attr:`allow_reuse_address` attribute before calling the
 | |
|   :meth:`server_bind` and :meth:`server_activate` methods to
 | |
|   open the socket and begin listening for connections.
 | |
|   (Contributed by Peter Parente; :issue:`1599845`.)
 | |
| 
 | |
|   :class:`SimpleXMLRPCServer` also has a :attr:`_send_traceback_header`
 | |
|   attribute; if true, the exception and formatted traceback are returned
 | |
|   as HTTP headers "X-Exception" and "X-Traceback".  This feature is
 | |
|   for debugging purposes only and should not be used on production servers
 | |
|   because the tracebacks might reveal passwords or other sensitive
 | |
|   information.  (Contributed by Alan McIntyre as part of his
 | |
|   project for Google's Summer of Code 2007.)
 | |
| 
 | |
| * The :mod:`xmlrpclib` module no longer automatically converts
 | |
|   :class:`datetime.date` and :class:`datetime.time` to the
 | |
|   :class:`xmlrpclib.DateTime` type; the conversion semantics were
 | |
|   not necessarily correct for all applications.  Code using
 | |
|   :mod:`xmlrpclib` should convert :class:`date` and :class:`~datetime.time`
 | |
|   instances. (:issue:`1330538`)  The code can also handle
 | |
|   dates before 1900 (contributed by Ralf Schmitt; :issue:`2014`)
 | |
|   and 64-bit integers represented by using ``<i8>`` in XML-RPC responses
 | |
|   (contributed by Riku Lindblad; :issue:`2985`).
 | |
| 
 | |
| * The :mod:`zipfile` module's :class:`ZipFile` class now has
 | |
|   :meth:`extract` and :meth:`extractall` methods that will unpack
 | |
|   a single file or all the files in the archive to the current directory, or
 | |
|   to a specified directory::
 | |
| 
 | |
|     z = zipfile.ZipFile('python-251.zip')
 | |
| 
 | |
|     # Unpack a single file, writing it relative
 | |
|     # to the /tmp directory.
 | |
|     z.extract('Python/sysmodule.c', '/tmp')
 | |
| 
 | |
|     # Unpack all the files in the archive.
 | |
|     z.extractall()
 | |
| 
 | |
|   (Contributed by Alan McIntyre; :issue:`467924`.)
 | |
| 
 | |
|   The :meth:`open`, :meth:`read` and :meth:`extract` methods can now
 | |
|   take either a filename or a :class:`ZipInfo` object.  This is useful when an
 | |
|   archive accidentally contains a duplicated filename.
 | |
|   (Contributed by Graham Horler; :issue:`1775025`.)
 | |
| 
 | |
|   Finally, :mod:`zipfile` now supports using Unicode filenames
 | |
|   for archived files.  (Contributed by Alexey Borzenkov; :issue:`1734346`.)
 | |
| 
 | |
| .. ======================================================================
 | |
| .. whole new modules get described in subsections here
 | |
| 
 | |
| The :mod:`ast` module
 | |
| ----------------------
 | |
| 
 | |
| The :mod:`ast` module provides an Abstract Syntax Tree
 | |
| representation of Python code, and Armin Ronacher
 | |
| contributed a set of helper functions that perform a variety of
 | |
| common tasks.  These will be useful for HTML templating
 | |
| packages, code analyzers, and similar tools that process
 | |
| Python code.
 | |
| 
 | |
| The :func:`parse` function takes an expression and returns an AST.
 | |
| The :func:`dump` function outputs a representation of a tree, suitable
 | |
| for debugging::
 | |
| 
 | |
|     import ast
 | |
| 
 | |
|     t = ast.parse("""
 | |
|     d = {}
 | |
|     for i in 'abcdefghijklm':
 | |
|         d[i + i] = ord(i) - ord('a') + 1
 | |
|     print d
 | |
|     """)
 | |
|     print ast.dump(t)
 | |
| 
 | |
| This outputs a deeply nested tree::
 | |
| 
 | |
|     Module(body=[
 | |
|       Assign(targets=[
 | |
|         Name(id='d', ctx=Store())
 | |
|        ], value=Dict(keys=[], values=[]))
 | |
|       For(target=Name(id='i', ctx=Store()),
 | |
|           iter=Str(s='abcdefghijklm'), body=[
 | |
|         Assign(targets=[
 | |
|           Subscript(value=
 | |
|             Name(id='d', ctx=Load()),
 | |
|               slice=
 | |
|               Index(value=
 | |
|                 BinOp(left=Name(id='i', ctx=Load()), op=Add(),
 | |
|                  right=Name(id='i', ctx=Load()))), ctx=Store())
 | |
|          ], value=
 | |
|          BinOp(left=
 | |
|           BinOp(left=
 | |
|            Call(func=
 | |
|             Name(id='ord', ctx=Load()), args=[
 | |
|               Name(id='i', ctx=Load())
 | |
|              ], keywords=[], starargs=None, kwargs=None),
 | |
|            op=Sub(), right=Call(func=
 | |
|             Name(id='ord', ctx=Load()), args=[
 | |
|               Str(s='a')
 | |
|              ], keywords=[], starargs=None, kwargs=None)),
 | |
|            op=Add(), right=Num(n=1)))
 | |
|         ], orelse=[])
 | |
|        Print(dest=None, values=[
 | |
|          Name(id='d', ctx=Load())
 | |
|        ], nl=True)
 | |
|      ])
 | |
| 
 | |
| The :func:`literal_eval` method takes a string or an AST
 | |
| representing a literal expression, parses and evaluates it, and
 | |
| returns the resulting value.  A literal expression is a Python
 | |
| expression containing only strings, numbers, dictionaries,
 | |
| etc. but no statements or function calls.  If you need to
 | |
| evaluate an expression but cannot accept the security risk of using an
 | |
| :func:`eval` call, :func:`literal_eval` will handle it safely::
 | |
| 
 | |
|     >>> literal = '("a", "b", {2:4, 3:8, 1:2})'
 | |
|     >>> print ast.literal_eval(literal)
 | |
|     ('a', 'b', {1: 2, 2: 4, 3: 8})
 | |
|     >>> print ast.literal_eval('"a" + "b"')
 | |
|     Traceback (most recent call last):
 | |
|       ...
 | |
|     ValueError: malformed string
 | |
| 
 | |
| The module also includes :class:`NodeVisitor` and
 | |
| :class:`NodeTransformer` classes for traversing and modifying an AST,
 | |
| and functions for common transformations such as changing line
 | |
| numbers.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| The :mod:`future_builtins` module
 | |
| --------------------------------------
 | |
| 
 | |
| Python 3.0 makes many changes to the repertoire of built-in
 | |
| functions, and most of the changes can't be introduced in the Python
 | |
| 2.x series because they would break compatibility.
 | |
| The :mod:`future_builtins` module provides versions
 | |
| of these built-in functions that can be imported when writing
 | |
| 3.0-compatible code.
 | |
| 
 | |
| The functions in this module currently include:
 | |
| 
 | |
| * ``ascii(obj)``: equivalent to :func:`repr`.  In Python 3.0,
 | |
|   :func:`repr` will return a Unicode string, while :func:`ascii` will
 | |
|   return a pure ASCII bytestring.
 | |
| 
 | |
| * ``filter(predicate, iterable)``,
 | |
|   ``map(func, iterable1, ...)``: the 3.0 versions
 | |
|   return iterators, unlike the 2.x builtins which return lists.
 | |
| 
 | |
| * ``hex(value)``, ``oct(value)``: instead of calling the
 | |
|   :meth:`__hex__` or :meth:`__oct__` methods, these versions will
 | |
|   call the :meth:`__index__` method and convert the result to hexadecimal
 | |
|   or octal.  :func:`oct` will use the new ``0o`` notation for its
 | |
|   result.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| The :mod:`json` module: JavaScript Object Notation
 | |
| --------------------------------------------------------------------
 | |
| 
 | |
| The new :mod:`json` module supports the encoding and decoding of Python types in
 | |
| JSON (Javascript Object Notation). JSON is a lightweight interchange format
 | |
| often used in web applications. For more information about JSON, see
 | |
| http://www.json.org.
 | |
| 
 | |
| :mod:`json` comes with support for decoding and encoding most built-in Python
 | |
| types. The following example encodes and decodes a dictionary::
 | |
| 
 | |
|        >>> import json
 | |
|        >>> data = {"spam": "foo", "parrot": 42}
 | |
|        >>> in_json = json.dumps(data) # Encode the data
 | |
|        >>> in_json
 | |
|        '{"parrot": 42, "spam": "foo"}'
 | |
|        >>> json.loads(in_json) # Decode into a Python object
 | |
|        {"spam": "foo", "parrot": 42}
 | |
| 
 | |
| It's also possible to write your own decoders and encoders to support
 | |
| more types. Pretty-printing of the JSON strings is also supported.
 | |
| 
 | |
| :mod:`json` (originally called simplejson) was written by Bob
 | |
| Ippolito.
 | |
| 
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| The :mod:`plistlib` module: A Property-List Parser
 | |
| --------------------------------------------------
 | |
| 
 | |
| The ``.plist`` format is commonly used on Mac OS X to
 | |
| store basic data types (numbers, strings, lists,
 | |
| and dictionaries) by serializing them into an XML-based format.
 | |
| It resembles the XML-RPC serialization of data types.
 | |
| 
 | |
| Despite being primarily used on Mac OS X, the format
 | |
| has nothing Mac-specific about it and the Python implementation works
 | |
| on any platform that Python supports, so the :mod:`plistlib` module
 | |
| has been promoted to the standard library.
 | |
| 
 | |
| Using the module is simple::
 | |
| 
 | |
|     import sys
 | |
|     import plistlib
 | |
|     import datetime
 | |
| 
 | |
|     # Create data structure
 | |
|     data_struct = dict(lastAccessed=datetime.datetime.now(),
 | |
|                        version=1,
 | |
|                        categories=('Personal','Shared','Private'))
 | |
| 
 | |
|     # Create string containing XML.
 | |
|     plist_str = plistlib.writePlistToString(data_struct)
 | |
|     new_struct = plistlib.readPlistFromString(plist_str)
 | |
|     print data_struct
 | |
|     print new_struct
 | |
| 
 | |
|     # Write data structure to a file and read it back.
 | |
|     plistlib.writePlist(data_struct, '/tmp/customizations.plist')
 | |
|     new_struct = plistlib.readPlist('/tmp/customizations.plist')
 | |
| 
 | |
|     # read/writePlist accepts file-like objects as well as paths.
 | |
|     plistlib.writePlist(data_struct, sys.stdout)
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| ctypes Enhancements
 | |
| --------------------------------------------------
 | |
| 
 | |
| Thomas Heller continued to maintain and enhance the
 | |
| :mod:`ctypes` module.
 | |
| 
 | |
| :mod:`ctypes` now supports a :class:`c_bool` datatype
 | |
| that represents the C99 ``bool`` type.  (Contributed by David Remahl;
 | |
| :issue:`1649190`.)
 | |
| 
 | |
| The :mod:`ctypes` string, buffer and array types have improved
 | |
| support for extended slicing syntax,
 | |
| where various combinations of ``(start, stop, step)`` are supplied.
 | |
| (Implemented by Thomas Wouters.)
 | |
| 
 | |
| .. Revision 57769
 | |
| 
 | |
| All :mod:`ctypes` data types now support
 | |
| :meth:`from_buffer` and :meth:`from_buffer_copy`
 | |
| methods that create a ctypes instance based on a
 | |
| provided buffer object.  :meth:`from_buffer_copy` copies
 | |
| the contents of the object,
 | |
| while :meth:`from_buffer` will share the same memory area.
 | |
| 
 | |
| A new calling convention tells :mod:`ctypes` to clear the ``errno`` or
 | |
| Win32 LastError variables at the outset of each wrapped call.
 | |
| (Implemented by Thomas Heller; :issue:`1798`.)
 | |
| 
 | |
| You can now retrieve the Unix ``errno`` variable after a function
 | |
| call.  When creating a wrapped function, you can supply
 | |
| ``use_errno=True`` as a keyword parameter to the :func:`DLL` function
 | |
| and then call the module-level methods :meth:`set_errno` and
 | |
| :meth:`get_errno` to set and retrieve the error value.
 | |
| 
 | |
| The Win32 LastError variable is similarly supported by
 | |
| the :func:`DLL`, :func:`OleDLL`, and :func:`WinDLL` functions.
 | |
| You supply ``use_last_error=True`` as a keyword parameter
 | |
| and then call the module-level methods :meth:`set_last_error`
 | |
| and :meth:`get_last_error`.
 | |
| 
 | |
| The :func:`byref` function, used to retrieve a pointer to a ctypes
 | |
| instance, now has an optional *offset* parameter that is a byte
 | |
| count that will be added to the returned pointer.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| Improved SSL Support
 | |
| --------------------------------------------------
 | |
| 
 | |
| Bill Janssen made extensive improvements to Python 2.6's support for
 | |
| the Secure Sockets Layer by adding a new module, :mod:`ssl`, that's
 | |
| built atop the `OpenSSL <https://www.openssl.org/>`__ library.
 | |
| This new module provides more control over the protocol negotiated,
 | |
| the X.509 certificates used, and has better support for writing SSL
 | |
| servers (as opposed to clients) in Python.  The existing SSL support
 | |
| in the :mod:`socket` module hasn't been removed and continues to work,
 | |
| though it will be removed in Python 3.0.
 | |
| 
 | |
| To use the new module, you must first create a TCP connection in the
 | |
| usual way and then pass it to the :func:`ssl.wrap_socket` function.
 | |
| It's possible to specify whether a certificate is required, and to
 | |
| obtain certificate info by calling the :meth:`getpeercert` method.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    The documentation for the :mod:`ssl` module.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| Deprecations and Removals
 | |
| =========================
 | |
| 
 | |
| * String exceptions have been removed.  Attempting to use them raises a
 | |
|   :exc:`TypeError`.
 | |
| 
 | |
| * Changes to the :class:`Exception` interface
 | |
|   as dictated by :pep:`352` continue to be made.  For 2.6,
 | |
|   the :attr:`message` attribute is being deprecated in favor of the
 | |
|   :attr:`args` attribute.
 | |
| 
 | |
| * (3.0-warning mode) Python 3.0 will feature a reorganized standard
 | |
|   library that will drop many outdated modules and rename others.
 | |
|   Python 2.6 running in 3.0-warning mode will warn about these modules
 | |
|   when they are imported.
 | |
| 
 | |
|   The list of deprecated modules is:
 | |
|   :mod:`audiodev`,
 | |
|   :mod:`bgenlocations`,
 | |
|   :mod:`buildtools`,
 | |
|   :mod:`bundlebuilder`,
 | |
|   :mod:`Canvas`,
 | |
|   :mod:`compiler`,
 | |
|   :mod:`dircache`,
 | |
|   :mod:`dl`,
 | |
|   :mod:`fpformat`,
 | |
|   :mod:`gensuitemodule`,
 | |
|   :mod:`ihooks`,
 | |
|   :mod:`imageop`,
 | |
|   :mod:`imgfile`,
 | |
|   :mod:`linuxaudiodev`,
 | |
|   :mod:`mhlib`,
 | |
|   :mod:`mimetools`,
 | |
|   :mod:`multifile`,
 | |
|   :mod:`new`,
 | |
|   :mod:`pure`,
 | |
|   :mod:`statvfs`,
 | |
|   :mod:`sunaudiodev`,
 | |
|   :mod:`test.testall`, and
 | |
|   :mod:`toaiff`.
 | |
| 
 | |
| * The :mod:`gopherlib` module has been removed.
 | |
| 
 | |
| * The :mod:`MimeWriter` module and :mod:`mimify` module
 | |
|   have been deprecated; use the :mod:`email`
 | |
|   package instead.
 | |
| 
 | |
| * The :mod:`md5` module has been deprecated; use the :mod:`hashlib` module
 | |
|   instead.
 | |
| 
 | |
| * The :mod:`posixfile` module has been deprecated; :func:`fcntl.lockf`
 | |
|   provides better locking.
 | |
| 
 | |
| * The :mod:`popen2` module has been deprecated; use the :mod:`subprocess`
 | |
|   module.
 | |
| 
 | |
| * The :mod:`rgbimg` module has been removed.
 | |
| 
 | |
| * The :mod:`sets` module has been deprecated; it's better to
 | |
|   use the built-in :class:`set` and :class:`frozenset` types.
 | |
| 
 | |
| * The :mod:`sha` module has been deprecated; use the :mod:`hashlib` module
 | |
|   instead.
 | |
| 
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| 
 | |
| Build and C API Changes
 | |
| =======================
 | |
| 
 | |
| Changes to Python's build process and to the C API include:
 | |
| 
 | |
| * Python now must be compiled with C89 compilers (after 19
 | |
|   years!).  This means that the Python source tree has dropped its
 | |
|   own implementations of :c:func:`memmove` and :c:func:`strerror`, which
 | |
|   are in the C89 standard library.
 | |
| 
 | |
| * Python 2.6 can be built with Microsoft Visual Studio 2008 (version
 | |
|   9.0), and this is the new default compiler.  See the
 | |
|   :file:`PCbuild` directory for the build files.  (Implemented by
 | |
|   Christian Heimes.)
 | |
| 
 | |
| * On Mac OS X, Python 2.6 can be compiled as a 4-way universal build.
 | |
|   The :program:`configure` script
 | |
|   can take a :option:`!--with-universal-archs=[32-bit|64-bit|all]`
 | |
|   switch, controlling whether the binaries are built for 32-bit
 | |
|   architectures (x86, PowerPC), 64-bit (x86-64 and PPC-64), or both.
 | |
|   (Contributed by Ronald Oussoren.)
 | |
| 
 | |
| * The BerkeleyDB module now has a C API object, available as
 | |
|   ``bsddb.db.api``.   This object can be used by other C extensions
 | |
|   that wish to use the :mod:`bsddb` module for their own purposes.
 | |
|   (Contributed by Duncan Grisby.)
 | |
| 
 | |
| * The new buffer interface, previously described in
 | |
|   `the PEP 3118 section <#pep-3118-revised-buffer-protocol>`__,
 | |
|   adds :c:func:`PyObject_GetBuffer` and :c:func:`PyBuffer_Release`,
 | |
|   as well as a few other functions.
 | |
| 
 | |
| * Python's use of the C stdio library is now thread-safe, or at least
 | |
|   as thread-safe as the underlying library is.  A long-standing potential
 | |
|   bug occurred if one thread closed a file object while another thread
 | |
|   was reading from or writing to the object.  In 2.6 file objects
 | |
|   have a reference count, manipulated by the
 | |
|   :c:func:`PyFile_IncUseCount` and :c:func:`PyFile_DecUseCount`
 | |
|   functions.  File objects can't be closed unless the reference count
 | |
|   is zero.  :c:func:`PyFile_IncUseCount` should be called while the GIL
 | |
|   is still held, before carrying out an I/O operation using the
 | |
|   ``FILE *`` pointer, and :c:func:`PyFile_DecUseCount` should be called
 | |
|   immediately after the GIL is re-acquired.
 | |
|   (Contributed by Antoine Pitrou and Gregory P. Smith.)
 | |
| 
 | |
| * Importing modules simultaneously in two different threads no longer
 | |
|   deadlocks; it will now raise an :exc:`ImportError`.  A new API
 | |
|   function, :c:func:`PyImport_ImportModuleNoBlock`, will look for a
 | |
|   module in ``sys.modules`` first, then try to import it after
 | |
|   acquiring an import lock.  If the import lock is held by another
 | |
|   thread, an :exc:`ImportError` is raised.
 | |
|   (Contributed by Christian Heimes.)
 | |
| 
 | |
| * Several functions return information about the platform's
 | |
|   floating-point support.  :c:func:`PyFloat_GetMax` returns
 | |
|   the maximum representable floating point value,
 | |
|   and :c:func:`PyFloat_GetMin` returns the minimum
 | |
|   positive value.  :c:func:`PyFloat_GetInfo` returns an object
 | |
|   containing more information from the :file:`float.h` file, such as
 | |
|   ``"mant_dig"`` (number of digits in the mantissa), ``"epsilon"``
 | |
|   (smallest difference between 1.0 and the next largest value
 | |
|   representable), and several others.
 | |
|   (Contributed by Christian Heimes; :issue:`1534`.)
 | |
| 
 | |
| * C functions and methods that use
 | |
|   :c:func:`PyComplex_AsCComplex` will now accept arguments that
 | |
|   have a :meth:`__complex__` method.  In particular, the functions in the
 | |
|   :mod:`cmath` module will now accept objects with this method.
 | |
|   This is a backport of a Python 3.0 change.
 | |
|   (Contributed by Mark Dickinson; :issue:`1675423`.)
 | |
| 
 | |
| * Python's C API now includes two functions for case-insensitive string
 | |
|   comparisons, ``PyOS_stricmp(char*, char*)``
 | |
|   and ``PyOS_strnicmp(char*, char*, Py_ssize_t)``.
 | |
|   (Contributed by Christian Heimes; :issue:`1635`.)
 | |
| 
 | |
| * Many C extensions define their own little macro for adding
 | |
|   integers and strings to the module's dictionary in the
 | |
|   ``init*`` function.  Python 2.6 finally defines standard macros
 | |
|   for adding values to a module, :c:macro:`PyModule_AddStringMacro`
 | |
|   and :c:macro:`PyModule_AddIntMacro()`.  (Contributed by
 | |
|   Christian Heimes.)
 | |
| 
 | |
| * Some macros were renamed in both 3.0 and 2.6 to make it clearer that
 | |
|   they are macros,
 | |
|   not functions.  :c:macro:`Py_Size()` became :c:macro:`Py_SIZE()`,
 | |
|   :c:macro:`Py_Type()` became :c:macro:`Py_TYPE()`, and
 | |
|   :c:macro:`Py_Refcnt()` became :c:macro:`Py_REFCNT()`.
 | |
|   The mixed-case macros are still available
 | |
|   in Python 2.6 for backward compatibility.
 | |
|   (:issue:`1629`)
 | |
| 
 | |
| * Distutils now places C extensions it builds in a
 | |
|   different directory when running on a debug version of Python.
 | |
|   (Contributed by Collin Winter; :issue:`1530959`.)
 | |
| 
 | |
| * Several basic data types, such as integers and strings, maintain
 | |
|   internal free lists of objects that can be re-used.  The data
 | |
|   structures for these free lists now follow a naming convention: the
 | |
|   variable is always named ``free_list``, the counter is always named
 | |
|   ``numfree``, and a macro ``Py<typename>_MAXFREELIST`` is
 | |
|   always defined.
 | |
| 
 | |
| * A new Makefile target, "make patchcheck", prepares the Python source tree
 | |
|   for making a patch: it fixes trailing whitespace in all modified
 | |
|   ``.py`` files, checks whether the documentation has been changed,
 | |
|   and reports whether the :file:`Misc/ACKS` and :file:`Misc/NEWS` files
 | |
|   have been updated.
 | |
|   (Contributed by Brett Cannon.)
 | |
| 
 | |
|   Another new target, "make profile-opt", compiles a Python binary
 | |
|   using GCC's profile-guided optimization.  It compiles Python with
 | |
|   profiling enabled, runs the test suite to obtain a set of profiling
 | |
|   results, and then compiles using these results for optimization.
 | |
|   (Contributed by Gregory P. Smith.)
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| Port-Specific Changes: Windows
 | |
| -----------------------------------
 | |
| 
 | |
| * The support for Windows 95, 98, ME and NT4 has been dropped.
 | |
|   Python 2.6 requires at least Windows 2000 SP4.
 | |
| 
 | |
| * The new default compiler on Windows is Visual Studio 2008 (version
 | |
|   9.0). The build directories for Visual Studio 2003 (version 7.1) and
 | |
|   2005 (version 8.0) were moved into the PC/ directory. The new
 | |
|   :file:`PCbuild` directory supports cross compilation for X64, debug
 | |
|   builds and Profile Guided Optimization (PGO). PGO builds are roughly
 | |
|   10% faster than normal builds.  (Contributed by Christian Heimes
 | |
|   with help from Amaury Forgeot d'Arc and Martin von Löwis.)
 | |
| 
 | |
| * The :mod:`msvcrt` module now supports
 | |
|   both the normal and wide char variants of the console I/O
 | |
|   API.  The :func:`getwch` function reads a keypress and returns a Unicode
 | |
|   value, as does the :func:`getwche` function.  The :func:`putwch` function
 | |
|   takes a Unicode character and writes it to the console.
 | |
|   (Contributed by Christian Heimes.)
 | |
| 
 | |
| * :func:`os.path.expandvars` will now expand environment variables in
 | |
|   the form "%var%", and "~user" will be expanded into the user's home
 | |
|   directory path.  (Contributed by Josiah Carlson; :issue:`957650`.)
 | |
| 
 | |
| * The :mod:`socket` module's socket objects now have an
 | |
|   :meth:`ioctl` method that provides a limited interface to the
 | |
|   :c:func:`WSAIoctl` system interface.
 | |
| 
 | |
| * The :mod:`_winreg` module now has a function,
 | |
|   :func:`ExpandEnvironmentStrings`,
 | |
|   that expands environment variable references such as ``%NAME%``
 | |
|   in an input string.  The handle objects provided by this
 | |
|   module now support the context protocol, so they can be used
 | |
|   in :keyword:`with` statements. (Contributed by Christian Heimes.)
 | |
| 
 | |
|   :mod:`_winreg` also has better support for x64 systems,
 | |
|   exposing the :func:`DisableReflectionKey`, :func:`EnableReflectionKey`,
 | |
|   and :func:`QueryReflectionKey` functions, which enable and disable
 | |
|   registry reflection for 32-bit processes running on 64-bit systems.
 | |
|   (:issue:`1753245`)
 | |
| 
 | |
| * The :mod:`msilib` module's :class:`Record` object
 | |
|   gained :meth:`GetInteger` and :meth:`GetString` methods that
 | |
|   return field values as an integer or a string.
 | |
|   (Contributed by Floris Bruynooghe; :issue:`2125`.)
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| Port-Specific Changes: Mac OS X
 | |
| -----------------------------------
 | |
| 
 | |
| * When compiling a framework build of Python, you can now specify the
 | |
|   framework name to be used by providing the
 | |
|   :option:`!--with-framework-name=` option to the
 | |
|   :program:`configure` script.
 | |
| 
 | |
| * The :mod:`macfs` module has been removed.  This in turn required the
 | |
|   :func:`macostools.touched` function to be removed because it depended on the
 | |
|   :mod:`macfs` module.  (:issue:`1490190`)
 | |
| 
 | |
| * Many other Mac OS modules have been deprecated and will be removed in
 | |
|   Python 3.0:
 | |
|   :mod:`_builtinSuites`,
 | |
|   :mod:`aepack`,
 | |
|   :mod:`aetools`,
 | |
|   :mod:`aetypes`,
 | |
|   :mod:`applesingle`,
 | |
|   :mod:`appletrawmain`,
 | |
|   :mod:`appletrunner`,
 | |
|   :mod:`argvemulator`,
 | |
|   :mod:`Audio_mac`,
 | |
|   :mod:`autoGIL`,
 | |
|   :mod:`Carbon`,
 | |
|   :mod:`cfmfile`,
 | |
|   :mod:`CodeWarrior`,
 | |
|   :mod:`ColorPicker`,
 | |
|   :mod:`EasyDialogs`,
 | |
|   :mod:`Explorer`,
 | |
|   :mod:`Finder`,
 | |
|   :mod:`FrameWork`,
 | |
|   :mod:`findertools`,
 | |
|   :mod:`ic`,
 | |
|   :mod:`icglue`,
 | |
|   :mod:`icopen`,
 | |
|   :mod:`macerrors`,
 | |
|   :mod:`MacOS`,
 | |
|   :mod:`macfs`,
 | |
|   :mod:`macostools`,
 | |
|   :mod:`macresource`,
 | |
|   :mod:`MiniAEFrame`,
 | |
|   :mod:`Nav`,
 | |
|   :mod:`Netscape`,
 | |
|   :mod:`OSATerminology`,
 | |
|   :mod:`pimp`,
 | |
|   :mod:`PixMapWrapper`,
 | |
|   :mod:`StdSuites`,
 | |
|   :mod:`SystemEvents`,
 | |
|   :mod:`Terminal`, and
 | |
|   :mod:`terminalcommand`.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| Port-Specific Changes: IRIX
 | |
| -----------------------------------
 | |
| 
 | |
| A number of old IRIX-specific modules were deprecated and will
 | |
| be removed in Python 3.0:
 | |
| :mod:`al` and :mod:`AL`,
 | |
| :mod:`cd`,
 | |
| :mod:`cddb`,
 | |
| :mod:`cdplayer`,
 | |
| :mod:`CL` and :mod:`cl`,
 | |
| :mod:`DEVICE`,
 | |
| :mod:`ERRNO`,
 | |
| :mod:`FILE`,
 | |
| :mod:`FL` and :mod:`fl`,
 | |
| :mod:`flp`,
 | |
| :mod:`fm`,
 | |
| :mod:`GET`,
 | |
| :mod:`GLWS`,
 | |
| :mod:`GL` and :mod:`gl`,
 | |
| :mod:`IN`,
 | |
| :mod:`IOCTL`,
 | |
| :mod:`jpeg`,
 | |
| :mod:`panelparser`,
 | |
| :mod:`readcd`,
 | |
| :mod:`SV` and :mod:`sv`,
 | |
| :mod:`torgb`,
 | |
| :mod:`videoreader`, and
 | |
| :mod:`WAIT`.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| 
 | |
| Porting to Python 2.6
 | |
| =====================
 | |
| 
 | |
| This section lists previously described changes and other bugfixes
 | |
| that may require changes to your code:
 | |
| 
 | |
| * Classes that aren't supposed to be hashable should
 | |
|   set ``__hash__ = None`` in their definitions to indicate
 | |
|   the fact.
 | |
| 
 | |
| * String exceptions have been removed.  Attempting to use them raises a
 | |
|   :exc:`TypeError`.
 | |
| 
 | |
| * The :meth:`__init__` method of :class:`collections.deque`
 | |
|   now clears any existing contents of the deque
 | |
|   before adding elements from the iterable.  This change makes the
 | |
|   behavior match ``list.__init__()``.
 | |
| 
 | |
| * :meth:`object.__init__` previously accepted arbitrary arguments and
 | |
|   keyword arguments, ignoring them.  In Python 2.6, this is no longer
 | |
|   allowed and will result in a :exc:`TypeError`.  This will affect
 | |
|   :meth:`__init__` methods that end up calling the corresponding
 | |
|   method on :class:`object` (perhaps through using :func:`super`).
 | |
|   See :issue:`1683368` for discussion.
 | |
| 
 | |
| * The :class:`Decimal` constructor now accepts leading and trailing
 | |
|   whitespace when passed a string.  Previously it would raise an
 | |
|   :exc:`InvalidOperation` exception.  On the other hand, the
 | |
|   :meth:`create_decimal` method of :class:`Context` objects now
 | |
|   explicitly disallows extra whitespace, raising a
 | |
|   :exc:`ConversionSyntax` exception.
 | |
| 
 | |
| * Due to an implementation accident, if you passed a file path to
 | |
|   the built-in  :func:`__import__` function, it would actually import
 | |
|   the specified file.  This was never intended to work, however, and
 | |
|   the implementation now explicitly checks for this case and raises
 | |
|   an :exc:`ImportError`.
 | |
| 
 | |
| * C API: the :c:func:`PyImport_Import` and :c:func:`PyImport_ImportModule`
 | |
|   functions now default to absolute imports, not relative imports.
 | |
|   This will affect C extensions that import other modules.
 | |
| 
 | |
| * C API: extension data types that shouldn't be hashable
 | |
|   should define their ``tp_hash`` slot to
 | |
|   :c:func:`PyObject_HashNotImplemented`.
 | |
| 
 | |
| * The :mod:`socket` module exception :exc:`socket.error` now inherits
 | |
|   from :exc:`IOError`.  Previously it wasn't a subclass of
 | |
|   :exc:`StandardError` but now it is, through :exc:`IOError`.
 | |
|   (Implemented by Gregory P. Smith; :issue:`1706815`.)
 | |
| 
 | |
| * The :mod:`xmlrpclib` module no longer automatically converts
 | |
|   :class:`datetime.date` and :class:`datetime.time` to the
 | |
|   :class:`xmlrpclib.DateTime` type; the conversion semantics were
 | |
|   not necessarily correct for all applications.  Code using
 | |
|   :mod:`xmlrpclib` should convert :class:`date` and :class:`~datetime.time`
 | |
|   instances. (:issue:`1330538`)
 | |
| 
 | |
| * (3.0-warning mode) The :class:`Exception` class now warns
 | |
|   when accessed using slicing or index access; having
 | |
|   :class:`Exception` behave like a tuple is being phased out.
 | |
| 
 | |
| * (3.0-warning mode) inequality comparisons between two dictionaries
 | |
|   or two objects that don't implement comparison methods are reported
 | |
|   as warnings.  ``dict1 == dict2`` still works, but ``dict1 < dict2``
 | |
|   is being phased out.
 | |
| 
 | |
|   Comparisons between cells, which are an implementation detail of Python's
 | |
|   scoping rules, also cause warnings because such comparisons are forbidden
 | |
|   entirely in 3.0.
 | |
| 
 | |
| .. ======================================================================
 | |
| 
 | |
| 
 | |
| .. _26acks:
 | |
| 
 | |
| Acknowledgements
 | |
| ================
 | |
| 
 | |
| The author would like to thank the following people for offering
 | |
| suggestions, corrections and assistance with various drafts of this
 | |
| article: Georg Brandl, Steve Brown, Nick Coghlan, Ralph Corderoy,
 | |
| Jim Jewett, Kent Johnson, Chris Lambacher,  Martin Michlmayr,
 | |
| Antoine Pitrou, Brian Warner.
 | |
| 
 |