Multiple clean-ups to the docs for builtin functions.

* Use concrete example for dir() and eliminate the distracting doctest directives.
* Add a pure python equivalent for enumerate()
* Modify the enumerate() example to demonstrate the start argument
* Remove incorrect reference the *iterable* in the enumerate() docs.
* Downgrade the comments on input() from a warning to a note.
* Fix the iter() example to use the empty string as the terminating
  condition for file.readline().  Also, the old example was broken
  because readline() results include a newline, so 'STOP\n' would have
  been the correct terminating condition.  Even with that fix, the
  STOP example was fragile and would have lead to infinite loops with
  malformed inputs.
* Do not refer to classmethod as being "more advanced" than staticmethod.
This commit is contained in:
Raymond Hettinger 2011-06-01 15:50:34 -07:00
parent 783a30f38e
commit 690d4ae8bf
1 changed files with 34 additions and 28 deletions

View File

@ -298,19 +298,19 @@ available. They are listed here in alphabetical order.
The resulting list is sorted alphabetically. For example: The resulting list is sorted alphabetically. For example:
>>> import struct >>> import struct
>>> dir() # doctest: +SKIP >>> dir() # show the names in the module namespace
['__builtins__', '__doc__', '__name__', 'struct'] ['__builtins__', '__doc__', '__name__', 'struct']
>>> dir(struct) # doctest: +NORMALIZE_WHITESPACE >>> dir(struct) # show the names in the struct module
['Struct', '__builtins__', '__doc__', '__file__', '__name__', ['Struct', '__builtins__', '__doc__', '__file__', '__name__',
'__package__', '_clearcache', 'calcsize', 'error', 'pack', 'pack_into', '__package__', '_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
'unpack', 'unpack_from'] 'unpack', 'unpack_from']
>>> class Foo(object): >>> class Shape(object):
... def __dir__(self): def __dir__(self):
... return ["kan", "ga", "roo"] return ['area', 'perimter', 'location']
...
>>> f = Foo() >>> f = Shape()
>>> dir(f) >>> dir(f)
['ga', 'kan', 'roo'] ['area', 'perimter', 'location']
.. note:: .. note::
@ -342,16 +342,22 @@ available. They are listed here in alphabetical order.
:term:`iterator`, or some other object which supports iteration. The :term:`iterator`, or some other object which supports iteration. The
:meth:`!next` method of the iterator returned by :func:`enumerate` returns a :meth:`!next` method of the iterator returned by :func:`enumerate` returns a
tuple containing a count (from *start* which defaults to 0) and the tuple containing a count (from *start* which defaults to 0) and the
corresponding value obtained from iterating over *iterable*. corresponding value obtained from iterating over *sequence*::
:func:`enumerate` is useful for obtaining an indexed series: ``(0, seq[0])``,
``(1, seq[1])``, ``(2, seq[2])``, .... For example:
>>> for i, season in enumerate(['Spring', 'Summer', 'Fall', 'Winter']): >>> for i, season in enumerate('Spring Summer Fall Winter'.split(), start=1):
... print i, season print i, season
0 Spring 1 Spring
1 Summer 2 Summer
2 Fall 3 Fall
3 Winter 4 Winter
Equivalent to::
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
.. versionadded:: 2.3 .. versionadded:: 2.3
.. versionadded:: 2.6 .. versionadded:: 2.6
@ -586,13 +592,12 @@ available. They are listed here in alphabetical order.
Equivalent to ``eval(raw_input(prompt))``. Equivalent to ``eval(raw_input(prompt))``.
.. warning:: .. note::
This function is not safe from user errors! It expects a valid Python This function does not catch user errors. It expects a valid Python
expression as input; if the input is not syntactically valid, a expression as input. If the input is not syntactically valid, a
:exc:`SyntaxError` will be raised. Other exceptions may be raised if there is an :exc:`SyntaxError` will be raised. Other exceptions may be raised if there
error during evaluation. (On the other hand, sometimes this is exactly what you is an error during evaluation.
need when writing a quick script for expert use.)
If the :mod:`readline` module was loaded, then :func:`input` will use it to If the :mod:`readline` module was loaded, then :func:`input` will use it to
provide elaborate line editing and history features. provide elaborate line editing and history features.
@ -660,10 +665,10 @@ available. They are listed here in alphabetical order.
One useful application of the second form of :func:`iter` is to read lines of One useful application of the second form of :func:`iter` is to read lines of
a file until a certain line is reached. The following example reads a file a file until a certain line is reached. The following example reads a file
until ``"STOP"`` is reached: :: until the :meth:`readline` method returns an empty string::
with open("mydata.txt") as fp: with open('mydata.txt') as fp:
for line in iter(fp.readline, "STOP"): for line in iter(fp.readline, ''):
process_line(line) process_line(line)
.. versionadded:: 2.2 .. versionadded:: 2.2
@ -1241,8 +1246,9 @@ available. They are listed here in alphabetical order.
It can be called either on the class (such as ``C.f()``) or on an instance (such It can be called either on the class (such as ``C.f()``) or on an instance (such
as ``C().f()``). The instance is ignored except for its class. as ``C().f()``). The instance is ignored except for its class.
Static methods in Python are similar to those found in Java or C++. For a more Static methods in Python are similar to those found in Java or C++. Also see
advanced concept, see :func:`classmethod` in this section. :func:`classmethod` for a variant that is useful for creating alternate
class constructors.
For more information on static methods, consult the documentation on the For more information on static methods, consult the documentation on the
standard type hierarchy in :ref:`types`. standard type hierarchy in :ref:`types`.