diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2010-05-06 14:14:09 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2010-05-06 14:14:09 (GMT) |
commit | e86b7fe37d5356788147e19b8cc87d4309d8b52e (patch) | |
tree | 60c7bb1f0d650d7022db54b64f7d3ee0911596d2 /Doc/whatsnew/2.7.rst | |
parent | 1bbb68d37c7077ffe3b188b8856eacd37e1c40dc (diff) | |
download | cpython-e86b7fe37d5356788147e19b8cc87d4309d8b52e.zip cpython-e86b7fe37d5356788147e19b8cc87d4309d8b52e.tar.gz cpython-e86b7fe37d5356788147e19b8cc87d4309d8b52e.tar.bz2 |
Describe ElementTree 1.3; rearrange new-module sections; describe dict views as sets; small edits and items
Diffstat (limited to 'Doc/whatsnew/2.7.rst')
-rw-r--r-- | Doc/whatsnew/2.7.rst | 237 |
1 files changed, 165 insertions, 72 deletions
diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst index cc073c2..a1e793e 100644 --- a/Doc/whatsnew/2.7.rst +++ b/Doc/whatsnew/2.7.rst @@ -8,10 +8,11 @@ .. Fix accents on Kristjan Valur Jonsson, Fuerstenau -.. Big jobs: ElementTree 1.3, pep 391 +.. Big jobs: pep 391 .. hyperlink all the methods & functions. .. T_STRING_INPLACE not described in main docs +.. XXX "Format String Syntax" in string.rst could use many more examples. .. $Id$ Rules for maintenance: @@ -238,8 +239,6 @@ separator and the grouping is always into three-digit groups. The comma-formatting mechanism isn't as general as the :mod:`locale` module, but it's easier to use. -.. XXX "Format String Syntax" in string.rst could use many more examples. - .. seealso:: :pep:`378` - Format Specifier for Thousands Separator @@ -366,7 +365,7 @@ Two smaller enhancements to the logging module are: .. rev79293 -* :class:`Logger` instances gained a :meth:`getChild` that retrieves a +* :class:`Logger` instances gained a :meth:`getChild` method that retrieves a descendant logger using a relative path. For example, once you retrieve a logger by doing ``log = getLogger('app')``, calling ``log.getChild('network.listen')`` is equivalent to @@ -388,8 +387,6 @@ The dictionary methods :meth:`keys`, :meth:`values`, and :meth:`items` are different in Python 3.x. They return an object called a :dfn:`view` instead of a fully materialized list. -.. Views can be iterated over, but they also behave like sets. XXX not working. - It's not possible to change the return values of :meth:`keys`, :meth:`values`, and :meth:`items` in Python 2.7 because too much code would break. Instead the 3.x versions were added under the new names @@ -403,6 +400,16 @@ of :meth:`viewkeys`, :meth:`viewvalues`, and :meth:`viewitems`. >>> d.viewkeys() dict_keys([0, 130, 10, 140, 20, 150, 30, ..., 250]) +Views can be iterated over, but they also behave like sets. The ``&`` +operator performs intersection, and ``|`` performs a union:: + + >>> d1 = dict((i*10, chr(65+i)) for i in range(26)) + >>> d2 = dict((i**.5, i) for i in range(1000)) + >>> d1.viewkeys() & d2.viewkeys() + set([0.0, 10.0, 20.0, 30.0]) + >>> d1.viewkeys() | range(0, 30) + set([0, 1, 130, 3, 4, 5, 6, ..., 120, 250]) + The view keeps track of the dictionary and its contents change as the dictionary is modified:: @@ -940,6 +947,11 @@ changes, or look through the Subversion logs for all the details. length as the read-only :attr:`~collections.deque.maxlen` attribute. (Both features added by Raymond Hettinger.) +* Deprecated function: :func:`contextlib.nested`, which allows + handling more than one context manager with a single :keyword:`with` + statement, has been deprecated, because :keyword:`with` supports + multiple context managers syntactically now. + * The :mod:`copy` module's :func:`~copy.deepcopy` function will now correctly copy bound instance methods. (Implemented by Robert Collins; :issue:`1515`.) @@ -1437,9 +1449,9 @@ changes, or look through the Subversion logs for all the details. management protocol, so you can write ``with zipfile.ZipFile(...) as f: ...``. (Contributed by Brian Curtin; :issue:`5511`.) - :mod:`zipfile` now supports archiving empty directories and + :mod:`zipfile` now also supports archiving empty directories and extracts them correctly. (Fixed by Kuba Wieczorek; :issue:`4710`.) - Reading files out of an archive is now faster, and interleaving + Reading files out of an archive is faster, and interleaving :meth:`~zipfile.ZipFile.read` and :meth:`~zipfile.ZipFile.readline` now works correctly. (Contributed by Nir Aides; :issue:`7610`.) @@ -1453,6 +1465,47 @@ changes, or look through the Subversion logs for all the details. :issue:`6003`.) +.. ====================================================================== +.. whole new modules get described in subsections here + + +.. _importlib-section: + +New module: importlib +------------------------------ + +Python 3.1 includes the :mod:`importlib` package, a re-implementation +of the logic underlying Python's :keyword:`import` statement. +:mod:`importlib` is useful for implementors of Python interpreters and +to users who wish to write new importers that can participate in the +import process. Python 2.7 doesn't contain the complete +:mod:`importlib` package, but instead has a tiny subset that contains +a single function, :func:`~importlib.import_module`. + +``import_module(name, package=None)`` imports a module. *name* is +a string containing the module or package's name. It's possible to do +relative imports by providing a string that begins with a ``.`` +character, such as ``..utils.errors``. For relative imports, the +*package* argument must be provided and is the name of the package that +will be used as the anchor for +the relative import. :func:`~importlib.import_module` both inserts the imported +module into ``sys.modules`` and returns the module object. + +Here are some examples:: + + >>> from importlib import import_module + >>> anydbm = import_module('anydbm') # Standard absolute import + >>> anydbm + <module 'anydbm' from '/p/python/Lib/anydbm.py'> + >>> # Relative import + >>> sysconfig = import_module('..sysconfig', 'distutils.command') + >>> sysconfig + <module 'distutils.sysconfig' from '/p/python/Lib/distutils/sysconfig.pyc'> + +:mod:`importlib` was implemented by Brett Cannon and introduced in +Python 3.1. + + New module: sysconfig --------------------------------- @@ -1482,15 +1535,26 @@ The Distutils package and :mod:`sysconfig` are now maintained and renamed by Tarek Ziadé. -Updated module: ElementTree 1.3 ---------------------------------- +ttk: Themed Widgets for Tk +-------------------------- -XXX write this. +Tcl/Tk 8.5 includes a set of themed widgets that re-implement basic Tk +widgets but have a more customizable appearance and can therefore more +closely resemble the native platform's widgets. This widget +set was originally called Tile, but was renamed to Ttk (for "themed Tk") +on being added to Tcl/Tck release 8.5. -.. ====================================================================== -.. whole new modules get described in subsections here +XXX write a brief discussion and an example here. + +The :mod:`ttk` module was written by Guilherme Polo and added in +:issue:`2983`. An alternate version called ``Tile.py``, written by +Martin Franklin and maintained by Kevin Walzer, was proposed for +inclusion in :issue:`2618`, but the authors argued that Guilherme +Polo's work was more comprehensive. +.. _unittest-section: + Unit Testing Enhancements --------------------------------- @@ -1668,67 +1732,91 @@ several files (by Benjamin Peterson). This doesn't affect how the module is imported or used. -.. _importlib-section: - -importlib: Importing Modules ------------------------------- - -Python 3.1 includes the :mod:`importlib` package, a re-implementation -of the logic underlying Python's :keyword:`import` statement. -:mod:`importlib` is useful for implementors of Python interpreters and -to users who wish to write new importers that can participate in the -import process. Python 2.7 doesn't contain the complete -:mod:`importlib` package, but instead has a tiny subset that contains -a single function, :func:`~importlib.import_module`. +.. _elementtree-section: -``import_module(name, package=None)`` imports a module. *name* is -a string containing the module or package's name. It's possible to do -relative imports by providing a string that begins with a ``.`` -character, such as ``..utils.errors``. For relative imports, the -*package* argument must be provided and is the name of the package that -will be used as the anchor for -the relative import. :func:`~importlib.import_module` both inserts the imported -module into ``sys.modules`` and returns the module object. - -Here are some examples:: - - >>> from importlib import import_module - >>> anydbm = import_module('anydbm') # Standard absolute import - >>> anydbm - <module 'anydbm' from '/p/python/Lib/anydbm.py'> - >>> # Relative import - >>> sysconfig = import_module('..sysconfig', 'distutils.command') - >>> sysconfig - <module 'distutils.sysconfig' from '/p/python/Lib/distutils/sysconfig.pyc'> - -:mod:`importlib` was implemented by Brett Cannon and introduced in -Python 3.1. - - -ttk: Themed Widgets for Tk --------------------------- - -Tcl/Tk 8.5 includes a set of themed widgets that re-implement basic Tk -widgets but have a more customizable appearance and can therefore more -closely resemble the native platform's widgets. This widget -set was originally called Tile, but was renamed to Ttk (for "themed Tk") -on being added to Tcl/Tck release 8.5. - -XXX write a brief discussion and an example here. - -The :mod:`ttk` module was written by Guilherme Polo and added in -:issue:`2983`. An alternate version called ``Tile.py``, written by -Martin Franklin and maintained by Kevin Walzer, was proposed for -inclusion in :issue:`2618`, but the authors argued that Guilherme -Polo's work was more comprehensive. - - -Deprecations and Removals -========================= +Updated module: ElementTree 1.3 +--------------------------------- -* :func:`contextlib.nested`, which allows handling more than one context manager - with one :keyword:`with` statement, has been deprecated; :keyword:`with` - supports multiple context managers syntactically now. +The version of the ElementTree library included with Python was updated to +version 1.3. Some of the new features in ElementTree 1.3 are: + +* The various parsing functions now take a *parser* keyword argument + that can be used to provide an :class:`XMLParser` instance that will + be used. This makes it possible to override the file's internal encoding: + + p = ET.XMLParser(encoding='utf-8') + t = ET.XML("""<root/>""", parser=p) + + Errors in parsing XML now raise a :exc:`ParseError` exception. + Instances of :exc:`ParseError` have a :attr:`position` attribute + containing a (*line*, *column*) tuple giving the location of the problem. + +* ElementTree's code for converting trees to a string has been + significantly reworked, making it roughly twice as fast in many + cases. The :class:`ElementTree` :meth:`write` and :class:`Element` + :meth:`write` methods now have a *method* parameter that can be + "xml" (the default), "html", or "text". HTML mode will output empty + elements as ``<empty></empty>`` instead of ``<empty/>``, and text + mode will skip over elements and only output the text chunks. If + you set the :attr:`tag` attribute of an element to ``None`` but + leaves its children in place, the element will be omitted when the + tree is written out, so you don't need to do more extensive rearrangement + to remove a single element. + + Namespace aspects have also been improved. All the ``xmlns:<whatever>`` + declarations are now put on the root element and not scattered throughout + the resulting output. You can set the default namespace for a tree + by setting the :attr:`default_namespace` attribute and can + register new prefixes with :meth:`regsiter_namespace`. In XML mode, + you can use the true/false *xml_declaration* parameter to suppress the + XML declaration. + +* New :class:`Element` method: :meth:`extend` appends the items from a + sequence to the element's children. Elements themselves behave like + sequences, so it's easy to move children from one element to + another:: + + from xml.etree import ElementTree as ET + + t = ET.XML("""<list> + <item>1</item> <item>2</item> <item>3</item> + </list>""") + new = ET.XML('<root/>') + new.extend(t) + + # Outputs <root><item>1</item>...</root> + print ET.tostring(new) + +* New :class:`Element` method: :meth:`iter` yields the children of the + element as a generator. It's also possible to write ``for child in + elem: ...`` to loop over an element's children. The existing method + :meth:`getiterator` is now deprecated. :meth:`getchildren` is + another similar method that constructs and returns a list of + children; it's also deprecated. + +* New :class:`Element` method: :meth:`itertext` yields all chunks of + text that are descendants of the element. For example:: + + t = ET.XML("""<list> + <item>1</item> <item>2</item> <item>3</item> + </list>""") + + # Outputs ['\n ', '1', ' ', '2', ' ', '3', '\n'] + print list(t.itertext()) + +* Deprecated: using an element as a Boolean (i.e., ``if elem: ...``) + would return true if the element had any children, or false if + there were no children. This behaviour will eventually change or be removed + because it's confusing (``None`` is false, but so is a childless element?), + so it will now trigger a :exc:`FutureWarning`. In your code, + you should be explicit: write ``len(elem) != 0`` if you're interested in + the number of children, or ``elem is not None`` Instead, + +Fredrik Lundh develops ElementTree and produced the 1.3 version; +you can read his article describing 1.3 at +http://effbot.org/zone/elementtree-13-intro.htm. +Florent Xicluna updated the version included with +Python, after discussions on python-dev and in :issue:`6472`.) .. ====================================================================== @@ -1988,6 +2076,11 @@ Porting to Python 2.7 This section lists previously described changes and other bugfixes that may require changes to your code: +* The :func:`range` function processes its arguments more + consistently; it will now call :meth:`__int__` on non-float, + non-integer arguments that are supplied to it. (Fixed by Alexander + Belopolsky; :issue:`1533`.) + * The string :meth:`format` method changed the default precision used for floating-point and complex numbers from 6 decimal places to 12, which matches the precision used by :func:`str`. |