| **************************** | |
| 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.upfrontsystems.co.za/>`__ | |
| of Stellenbosch, South Africa. Martin von Loewis 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 Loewis'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 <http://sphinx-doc.org/examples.html>`__) | |
| have adopted Sphinx as their documentation tool. | |
| .. seealso:: | |
| `Documenting Python <https://docs.python.org/devguide/documenting.html>`__ | |
| 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 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 | |
| .. _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.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 Loewis, 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 Loewis.) | |
| .. ====================================================================== | |
| 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 Avion, 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 Haering, | |
| 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 Loewis; :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.SimpleXMLRPCServer` and :class:`~DocXMLRPCServer.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.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 Loewis.) | |
| * 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. | |