summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEthan Furman <ethan@stoneleaf.us>2013-10-18 00:45:40 -0700
committerEthan Furman <ethan@stoneleaf.us>2013-10-18 00:45:40 -0700
commit2498d9e96834bb21b5c8bb55c81f311a2760ea7a (patch)
treebea3cd9f6bfbcc8ec4c94e33d1a9795e89b53394
parent63c141cacd0d655647430fe4b6a10c22d355aef2 (diff)
downloadcpython-git-2498d9e96834bb21b5c8bb55c81f311a2760ea7a.tar.gz
Issue #19272: slight clarification of pickle docs with regard to lambda.
-rw-r--r--Doc/library/pickle.rst8
1 files changed, 6 insertions, 2 deletions
diff --git a/Doc/library/pickle.rst b/Doc/library/pickle.rst
index 0354a3013d..3bdbcf941b 100644
--- a/Doc/library/pickle.rst
+++ b/Doc/library/pickle.rst
@@ -384,7 +384,8 @@ The following types can be pickled:
* tuples, lists, sets, and dictionaries containing only picklable objects
-* functions defined at the top level of a module
+* functions defined at the top level of a module (using :keyword:`def`, not
+ :keyword:`lambda`)
* built-in functions defined at the top level of a module
@@ -402,7 +403,7 @@ raised in this case. You can carefully raise this limit with
:func:`sys.setrecursionlimit`.
Note that functions (built-in and user-defined) are pickled by "fully qualified"
-name reference, not by value. This means that only the function name is
+name reference, not by value. [#]_ This means that only the function name is
pickled, along with the name of the module the function is defined in. Neither
the function's code, nor any of its function attributes are pickled. Thus the
defining module must be importable in the unpickling environment, and the module
@@ -850,6 +851,9 @@ The following example reads the resulting pickled data. ::
.. [#] Don't confuse this with the :mod:`marshal` module
+.. [#] This is why :keyword:`lambda` functions cannot be pickled: all
+ :keyword:`lambda` functions share the same name: ``<lambda>``.
+
.. [#] The exception raised will likely be an :exc:`ImportError` or an
:exc:`AttributeError` but it could be something else.