Commit 93dc9eb2 authored by Georg Brandl's avatar Georg Brandl

Merged revisions 78760,78771-78773,78802,78922,78952 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r78760 | georg.brandl | 2010-03-07 16:23:59 +0100 (So, 07 Mär 2010) | 1 line

  #5341: more built-in vs builtin fixes.
........
  r78771 | georg.brandl | 2010-03-07 21:58:31 +0100 (So, 07 Mär 2010) | 1 line

  #8085: The function is called PyObject_NewVar, not PyObject_VarNew.
........
  r78772 | georg.brandl | 2010-03-07 22:12:28 +0100 (So, 07 Mär 2010) | 1 line

  #8039: document conditional expressions better, giving them their own section.
........
  r78773 | georg.brandl | 2010-03-07 22:32:06 +0100 (So, 07 Mär 2010) | 1 line

  #8044: document Py_{Enter,Leave}RecursiveCall functions.
........
  r78802 | georg.brandl | 2010-03-08 17:28:40 +0100 (Mo, 08 Mär 2010) | 1 line

  Fix typo.
........
  r78922 | georg.brandl | 2010-03-13 14:41:58 +0100 (Sa, 13 Mär 2010) | 1 line

  Update for new download location.
........
  r78952 | georg.brandl | 2010-03-14 10:55:08 +0100 (So, 14 Mär 2010) | 1 line

  #8137: add iso-8859-16 to the standard encodings table.
........
parent c0e22b78
...@@ -471,6 +471,36 @@ Exception Objects ...@@ -471,6 +471,36 @@ Exception Objects
This steals a reference to *ctx*. This steals a reference to *ctx*.
Recursion Control
=================
These two functions provide a way to perform safe recursive calls at the C
level, both in the core and in extension modules. They are needed if the
recursive code does not necessarily invoke Python code (which tracks its
recursion depth automatically).
.. cfunction:: int Py_EnterRecursiveCall(char *where)
Marks a point where a recursive C-level call is about to be performed.
If :const:`USE_STACKCHECK` is defined, this function checks if the the OS
stack overflowed using :cfunc:`PyOS_CheckStack`. In this is the case, it
sets a :exc:`MemoryError` and returns a nonzero value.
The function then checks if the recursion limit is reached. If this is the
case, a :exc:`RuntimeError` is set and a nonzero value is returned.
Otherwise, zero is returned.
*where* should be a string such as ``" in instance check"`` to be
concatenated to the :exc:`RuntimeError` message caused by the recursion depth
limit.
.. cfunction:: void Py_LeaveRecursiveCall()
Ends a :cfunc:`Py_EnterRecursiveCall`. Must be called once for each
*successful* invocation of :cfunc:`Py_EnterRecursiveCall`.
.. _standardexceptions: .. _standardexceptions:
Standard Exceptions Standard Exceptions
......
...@@ -28,7 +28,7 @@ include the :const:`Py_TPFLAGS_HAVE_GC` and provide an implementation of the ...@@ -28,7 +28,7 @@ include the :const:`Py_TPFLAGS_HAVE_GC` and provide an implementation of the
Constructors for container types must conform to two rules: Constructors for container types must conform to two rules:
#. The memory for the object must be allocated using :cfunc:`PyObject_GC_New` #. The memory for the object must be allocated using :cfunc:`PyObject_GC_New`
or :cfunc:`PyObject_GC_VarNew`. or :cfunc:`PyObject_GC_NewVar`.
#. Once all the fields which may contain references to other containers are #. Once all the fields which may contain references to other containers are
initialized, it must call :cfunc:`PyObject_GC_Track`. initialized, it must call :cfunc:`PyObject_GC_Track`.
......
...@@ -182,7 +182,7 @@ type objects) *must* have the :attr:`ob_size` field. ...@@ -182,7 +182,7 @@ type objects) *must* have the :attr:`ob_size` field.
instance; this is normally :cfunc:`PyObject_Del` if the instance was allocated instance; this is normally :cfunc:`PyObject_Del` if the instance was allocated
using :cfunc:`PyObject_New` or :cfunc:`PyObject_VarNew`, or using :cfunc:`PyObject_New` or :cfunc:`PyObject_VarNew`, or
:cfunc:`PyObject_GC_Del` if the instance was allocated using :cfunc:`PyObject_GC_Del` if the instance was allocated using
:cfunc:`PyObject_GC_New` or :cfunc:`PyObject_GC_VarNew`. :cfunc:`PyObject_GC_New` or :cfunc:`PyObject_GC_NewVar`.
This field is inherited by subtypes. This field is inherited by subtypes.
......
...@@ -855,7 +855,7 @@ By default, ArgumentParser objects read command-line args in as simple strings. ...@@ -855,7 +855,7 @@ By default, ArgumentParser objects read command-line args in as simple strings.
However, quite often the command-line string should instead be interpreted as However, quite often the command-line string should instead be interpreted as
another type, like a :class:`float`, :class:`int` or :class:`file`. The another type, like a :class:`float`, :class:`int` or :class:`file`. The
``type`` keyword argument of :meth:`add_argument` allows any necessary ``type`` keyword argument of :meth:`add_argument` allows any necessary
type-checking and type-conversions to be performed. Many common builtin types type-checking and type-conversions to be performed. Many common built-in types
can be used directly as the value of the ``type`` argument:: can be used directly as the value of the ``type`` argument::
>>> parser = argparse.ArgumentParser() >>> parser = argparse.ArgumentParser()
......
...@@ -1065,11 +1065,13 @@ particular, the following variants typically exist: ...@@ -1065,11 +1065,13 @@ particular, the following variants typically exist:
+-----------------+--------------------------------+--------------------------------+ +-----------------+--------------------------------+--------------------------------+
| iso8859_10 | iso-8859-10, latin6, L6 | Nordic languages | | iso8859_10 | iso-8859-10, latin6, L6 | Nordic languages |
+-----------------+--------------------------------+--------------------------------+ +-----------------+--------------------------------+--------------------------------+
| iso8859_13 | iso-8859-13 | Baltic languages | | iso8859_13 | iso-8859-13, latin7, L7 | Baltic languages |
+-----------------+--------------------------------+--------------------------------+ +-----------------+--------------------------------+--------------------------------+
| iso8859_14 | iso-8859-14, latin8, L8 | Celtic languages | | iso8859_14 | iso-8859-14, latin8, L8 | Celtic languages |
+-----------------+--------------------------------+--------------------------------+ +-----------------+--------------------------------+--------------------------------+
| iso8859_15 | iso-8859-15 | Western Europe | | iso8859_15 | iso-8859-15, latin9, L9 | Western Europe |
+-----------------+--------------------------------+--------------------------------+
| iso8859_16 | iso-8859-16, latin10, L10 | South-Eastern Europe |
+-----------------+--------------------------------+--------------------------------+ +-----------------+--------------------------------+--------------------------------+
| johab | cp1361, ms1361 | Korean | | johab | cp1361, ms1361 | Korean |
+-----------------+--------------------------------+--------------------------------+ +-----------------+--------------------------------+--------------------------------+
......
...@@ -120,7 +120,7 @@ namespace is searched. The global statement must precede all uses of the name. ...@@ -120,7 +120,7 @@ namespace is searched. The global statement must precede all uses of the name.
.. index:: pair: restricted; execution .. index:: pair: restricted; execution
The built-in namespace associated with the execution of a code block is actually The builtins namespace associated with the execution of a code block is actually
found by looking up the name ``__builtins__`` in its global namespace; this found by looking up the name ``__builtins__`` in its global namespace; this
should be a dictionary or a module (in the latter case the module's dictionary should be a dictionary or a module (in the latter case the module's dictionary
is used). By default, when in the :mod:`__main__` module, ``__builtins__`` is is used). By default, when in the :mod:`__main__` module, ``__builtins__`` is
...@@ -132,7 +132,7 @@ weak form of restricted execution. ...@@ -132,7 +132,7 @@ weak form of restricted execution.
.. impl-detail:: .. impl-detail::
Users should not touch ``__builtins__``; it is strictly an implementation Users should not touch ``__builtins__``; it is strictly an implementation
detail. Users wanting to override values in the built-in namespace should detail. Users wanting to override values in the builtins namespace should
:keyword:`import` the :mod:`builtins` module and modify its :keyword:`import` the :mod:`builtins` module and modify its
attributes appropriately. attributes appropriately.
......
...@@ -1113,12 +1113,7 @@ Boolean operations ...@@ -1113,12 +1113,7 @@ Boolean operations
pair: Conditional; expression pair: Conditional; expression
pair: Boolean; operation pair: Boolean; operation
Boolean operations have the lowest priority of all Python operations:
.. productionlist:: .. productionlist::
expression: `conditional_expression` | `lambda_form`
expression_nocond: `or_test` | `lambda_form_nocond`
conditional_expression: `or_test` ["if" `or_test` "else" `expression`]
or_test: `and_test` | `or_test` "or" `and_test` or_test: `and_test` | `or_test` "or" `and_test`
and_test: `not_test` | `and_test` "and" `not_test` and_test: `not_test` | `and_test` "and" `not_test`
not_test: `comparison` | "not" `not_test` not_test: `comparison` | "not" `not_test`
...@@ -1135,10 +1130,6 @@ truth value by providing a :meth:`__bool__` method. ...@@ -1135,10 +1130,6 @@ truth value by providing a :meth:`__bool__` method.
The operator :keyword:`not` yields ``True`` if its argument is false, ``False`` The operator :keyword:`not` yields ``True`` if its argument is false, ``False``
otherwise. otherwise.
The expression ``x if C else y`` first evaluates *C* (*not* *x*); if *C* is
true, *x* is evaluated and its value is returned; otherwise, *y* is evaluated
and its value is returned.
.. index:: operator: and .. index:: operator: and
The expression ``x and y`` first evaluates *x*; if *x* is false, its value is The expression ``x and y`` first evaluates *x*; if *x* is false, its value is
...@@ -1158,6 +1149,30 @@ not bother to return a value of the same type as its argument, so e.g., ``not ...@@ -1158,6 +1149,30 @@ not bother to return a value of the same type as its argument, so e.g., ``not
'foo'`` yields ``False``, not ``''``.) 'foo'`` yields ``False``, not ``''``.)
Conditional Expressions
=======================
.. versionadded:: 2.5
.. index::
pair: conditional; expression
pair: ternary; operator
.. productionlist::
conditional_expression: `or_test` ["if" `or_test` "else" `expression`]
expression: `conditional_expression` | `lambda_form`
expression_nocond: `or_test` | `lambda_form_nocond`
Conditional expressions (sometimes called a "ternary operator") have the lowest
priority of all Python operations.
The expression ``x if C else y`` first evaluates the condition, *C* (*not* *x*);
if *C* is true, *x* is evaluated and its value is returned; otherwise, *y* is
evaluated and its value is returned.
See :pep:`308` for more details about conditional expressions.
.. _lambdas: .. _lambdas:
.. _lambda: .. _lambda:
...@@ -1252,6 +1267,8 @@ groups from right to left). ...@@ -1252,6 +1267,8 @@ groups from right to left).
+===============================================+=====================================+ +===============================================+=====================================+
| :keyword:`lambda` | Lambda expression | | :keyword:`lambda` | Lambda expression |
+-----------------------------------------------+-------------------------------------+ +-----------------------------------------------+-------------------------------------+
| :keyword:`if` -- :keyword:`else` | Conditional expression |
+-----------------------------------------------+-------------------------------------+
| :keyword:`or` | Boolean OR | | :keyword:`or` | Boolean OR |
+-----------------------------------------------+-------------------------------------+ +-----------------------------------------------+-------------------------------------+
| :keyword:`and` | Boolean AND | | :keyword:`and` | Boolean AND |
......
...@@ -111,9 +111,9 @@ are: ...@@ -111,9 +111,9 @@ are:
:func:`reduce` function. :func:`reduce` function.
Python 3.0 adds several new built-in functions and changes the Python 3.0 adds several new built-in functions and changes the
semantics of some existing built-ins. Functions that are new in 3.0 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 such as :func:`bin` have simply been added to Python 2.6, but existing
built-ins haven't been changed; instead, the :mod:`future_builtins` builtins haven't been changed; instead, the :mod:`future_builtins`
module has versions with the new 3.0 semantics. Code written to be 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 compatible with 3.0 can do ``from future_builtins import hex, map`` as
necessary. necessary.
...@@ -837,7 +837,7 @@ formatted. It receives a single argument, the format specifier:: ...@@ -837,7 +837,7 @@ formatted. It receives a single argument, the format specifier::
else: else:
return str(self) return str(self)
There's also a :func:`format` built-in that will format a single There's also a :func:`format` builtin that will format a single
value. It calls the type's :meth:`__format__` method with the value. It calls the type's :meth:`__format__` method with the
provided specifier:: provided specifier::
...@@ -1168,7 +1168,7 @@ access protocol. Abstract Base Classes (or ABCs) are an equivalent ...@@ -1168,7 +1168,7 @@ access protocol. Abstract Base Classes (or ABCs) are an equivalent
feature for Python. The ABC support consists of an :mod:`abc` module feature for Python. The ABC support consists of an :mod:`abc` module
containing a metaclass called :class:`ABCMeta`, special handling of containing a metaclass called :class:`ABCMeta`, special handling of
this metaclass by the :func:`isinstance` and :func:`issubclass` this metaclass by the :func:`isinstance` and :func:`issubclass`
built-ins, and a collection of basic ABCs that the Python developers builtins, and a collection of basic ABCs that the Python developers
think will be widely useful. Future versions of Python will probably think will be widely useful. Future versions of Python will probably
add more ABCs. add more ABCs.
...@@ -1322,9 +1322,9 @@ an octal number, but it does add support for "0o" and "0b":: ...@@ -1322,9 +1322,9 @@ an octal number, but it does add support for "0o" and "0b"::
>>> 0b101111 >>> 0b101111
47 47
The :func:`oct` built-in still returns numbers The :func:`oct` builtin still returns numbers
prefixed with a leading zero, and a new :func:`bin` prefixed with a leading zero, and a new :func:`bin`
built-in returns the binary representation for a number:: builtin returns the binary representation for a number::
>>> oct(42) >>> oct(42)
'052' '052'
...@@ -1333,7 +1333,7 @@ built-in returns the binary representation for a number:: ...@@ -1333,7 +1333,7 @@ built-in returns the binary representation for a number::
>>> bin(173) >>> bin(173)
'0b10101101' '0b10101101'
The :func:`int` and :func:`long` built-ins will now accept the "0o" 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 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 *base* argument is zero (signalling that the base used should be
determined from the string):: determined from the string)::
...@@ -1419,7 +1419,7 @@ can be shifted left and right with ``<<`` and ``>>``, ...@@ -1419,7 +1419,7 @@ can be shifted left and right with ``<<`` and ``>>``,
combined using bitwise operations such as ``&`` and ``|``, combined using bitwise operations such as ``&`` and ``|``,
and can be used as array indexes and slice boundaries. and can be used as array indexes and slice boundaries.
In Python 3.0, the PEP slightly redefines the existing built-ins In Python 3.0, the PEP slightly redefines the existing builtins
:func:`round`, :func:`math.floor`, :func:`math.ceil`, and adds a new :func:`round`, :func:`math.floor`, :func:`math.ceil`, and adds a new
one, :func:`math.trunc`, that's been backported to Python 2.6. one, :func:`math.trunc`, that's been backported to Python 2.6.
:func:`math.trunc` rounds toward zero, returning the closest :func:`math.trunc` rounds toward zero, returning the closest
...@@ -1527,7 +1527,7 @@ Some smaller changes made to the core Python language are: ...@@ -1527,7 +1527,7 @@ Some smaller changes made to the core Python language are:
Previously this would have been a syntax error. Previously this would have been a syntax error.
(Contributed by Amaury Forgeot d'Arc; :issue:`3473`.) (Contributed by Amaury Forgeot d'Arc; :issue:`3473`.)
* A new built-in, ``next(iterator, [default])`` returns the next item * A new builtin, ``next(iterator, [default])`` returns the next item
from the specified iterator. If the *default* argument is supplied, from the specified iterator. If the *default* argument is supplied,
it will be returned if *iterator* has been exhausted; otherwise, it will be returned if *iterator* has been exhausted; otherwise,
the :exc:`StopIteration` exception will be raised. (Backported the :exc:`StopIteration` exception will be raised. (Backported
...@@ -1956,9 +1956,9 @@ changes, or look through the Subversion logs for all the details. ...@@ -1956,9 +1956,9 @@ changes, or look through the Subversion logs for all the details.
(Contributed by Phil Schwartz; :issue:`1221598`.) (Contributed by Phil Schwartz; :issue:`1221598`.)
* The :func:`reduce` built-in function is also available in the * The :func:`reduce` built-in function is also available in the
:mod:`functools` module. In Python 3.0, the built-in has been :mod:`functools` module. In Python 3.0, the builtin has been
dropped and :func:`reduce` is only available from :mod:`functools`; dropped and :func:`reduce` is only available from :mod:`functools`;
currently there are no plans to drop the built-in in the 2.x series. currently there are no plans to drop the builtin in the 2.x series.
(Patched by Christian Heimes; :issue:`1739906`.) (Patched by Christian Heimes; :issue:`1739906`.)
* When possible, the :mod:`getpass` module will now use * When possible, the :mod:`getpass` module will now use
...@@ -2760,7 +2760,7 @@ The functions in this module currently include: ...@@ -2760,7 +2760,7 @@ The functions in this module currently include:
* ``filter(predicate, iterable)``, * ``filter(predicate, iterable)``,
``map(func, iterable1, ...)``: the 3.0 versions ``map(func, iterable1, ...)``: the 3.0 versions
return iterators, unlike the 2.x built-ins which return lists. return iterators, unlike the 2.x builtins which return lists.
* ``hex(value)``, ``oct(value)``: instead of calling the * ``hex(value)``, ``oct(value)``: instead of calling the
:meth:`__hex__` or :meth:`__oct__` methods, these versions will :meth:`__hex__` or :meth:`__oct__` methods, these versions will
......
This diff is collapsed.
...@@ -37,7 +37,7 @@ Py_TRACE_REFS introduced in 1.4 ...@@ -37,7 +37,7 @@ Py_TRACE_REFS introduced in 1.4
Turn on heavy reference debugging. This is major surgery. Every PyObject Turn on heavy reference debugging. This is major surgery. Every PyObject
grows two more pointers, to maintain a doubly-linked list of all live grows two more pointers, to maintain a doubly-linked list of all live
heap-allocated objects. Most builtin type objects are not in this list, heap-allocated objects. Most built-in type objects are not in this list,
as they're statically allocated. Starting in Python 2.3, if COUNT_ALLOCS as they're statically allocated. Starting in Python 2.3, if COUNT_ALLOCS
(see below) is also defined, a static type object T does appear in this (see below) is also defined, a static type object T does appear in this
list if at least one object of type T has been created. list if at least one object of type T has been created.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment