Apply modified version of Collin Winter's patch #1478788
Renames functional extension module to _functools and adds a Python functools module so that utility functions like update_wrapper can be added easily.
This commit is contained in:
parent
c7c51147c7
commit
c649ec5b69
|
@ -262,6 +262,7 @@ LIBFILES= $(MANSTYLES) $(INDEXSTYLES) $(COMMONTEX) \
|
|||
lib/libsimplexmlrpc.tex \
|
||||
lib/libdocxmlrpc.tex \
|
||||
lib/libpyexpat.tex \
|
||||
lib/libfunctools.tex \
|
||||
lib/xmldom.tex \
|
||||
lib/xmldomminidom.tex \
|
||||
lib/xmldompulldom.tex \
|
||||
|
|
|
@ -129,8 +129,8 @@ and how to embed it in other applications.
|
|||
% Functions, Functional, Generators and Iterators
|
||||
% XXX intro functional
|
||||
\input{libitertools}
|
||||
\input{libfunctional}
|
||||
\input{liboperator} % from runtime - better with itertools and functional
|
||||
\input{libfunctools}
|
||||
\input{liboperator} % from runtime - better with itertools and functools
|
||||
|
||||
|
||||
% =============
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
\section{\module{functional} ---
|
||||
\section{\module{functools} ---
|
||||
Higher order functions and operations on callable objects.}
|
||||
|
||||
\declaremodule{standard}{functional} % standard library, in Python
|
||||
\declaremodule{standard}{functools} % standard library, in Python
|
||||
|
||||
\moduleauthor{Peter Harris}{scav@blueyonder.co.uk}
|
||||
\moduleauthor{Raymond Hettinger}{python@rcn.com}
|
||||
|
@ -11,12 +11,12 @@
|
|||
|
||||
\versionadded{2.5}
|
||||
|
||||
The \module{functional} module is for higher-order functions: functions
|
||||
The \module{functools} module is for higher-order functions: functions
|
||||
that act on or return other functions. In general, any callable object can
|
||||
be treated as a function for the purposes of this module.
|
||||
|
||||
|
||||
The \module{functional} module defines the following function:
|
||||
The \module{functools} module defines the following function:
|
||||
|
||||
\begin{funcdesc}{partial}{func\optional{,*args}\optional{, **keywords}}
|
||||
Return a new \class{partial} object which when called will behave like
|
|
@ -1,4 +1,4 @@
|
|||
import functional
|
||||
import functools
|
||||
import unittest
|
||||
from test import test_support
|
||||
from weakref import proxy
|
||||
|
@ -21,7 +21,7 @@ def capture(*args, **kw):
|
|||
|
||||
class TestPartial(unittest.TestCase):
|
||||
|
||||
thetype = functional.partial
|
||||
thetype = functools.partial
|
||||
|
||||
def test_basic_examples(self):
|
||||
p = self.thetype(capture, 1, 2, a=10, b=20)
|
||||
|
@ -140,7 +140,7 @@ class TestPartial(unittest.TestCase):
|
|||
join = self.thetype(''.join)
|
||||
self.assertEqual(join(data), '0123456789')
|
||||
|
||||
class PartialSubclass(functional.partial):
|
||||
class PartialSubclass(functools.partial):
|
||||
pass
|
||||
|
||||
class TestPartialSubclass(TestPartial):
|
12
Misc/NEWS
12
Misc/NEWS
|
@ -4,10 +4,10 @@ Python News
|
|||
|
||||
(editors: check NEWS.help for information about editing NEWS using ReST.)
|
||||
|
||||
What's New in Python 2.5 alpha 3?
|
||||
What's New in Python 2.5 beta 1?
|
||||
=================================
|
||||
|
||||
*Release date: XX-MAY-2006*
|
||||
*Release date: XX-JUN-2006*
|
||||
|
||||
Core and builtins
|
||||
-----------------
|
||||
|
@ -62,6 +62,11 @@ Core and builtins
|
|||
Extension Modules
|
||||
-----------------
|
||||
|
||||
- Patch #1478788 (modified version): The functional extension module has
|
||||
been renamed to _functools and a functools Python wrapper module added.
|
||||
This provides a home for additional function related utilities that are
|
||||
not specifically about functional programming. See PEP 309.
|
||||
|
||||
- Patch #1493701: performance enhancements for struct module.
|
||||
|
||||
- Patch #1490224: time.altzone is now set correctly on Cygwin.
|
||||
|
@ -82,6 +87,7 @@ Extension Modules
|
|||
- Calling Tk_Init twice is refused if the first call failed as that
|
||||
may deadlock.
|
||||
|
||||
|
||||
Library
|
||||
-------
|
||||
|
||||
|
@ -142,6 +148,8 @@ Tools
|
|||
Documentation
|
||||
-------------
|
||||
|
||||
|
||||
|
||||
What's New in Python 2.5 alpha 2?
|
||||
=================================
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
#include "Python.h"
|
||||
#include "structmember.h"
|
||||
|
||||
/* Functional module written and maintained
|
||||
/* _functools module written and maintained
|
||||
by Hye-Shik Chang <perky@FreeBSD.org>
|
||||
with adaptations by Raymond Hettinger <python@rcn.com>
|
||||
Copyright (c) 2004, 2005 Python Software Foundation.
|
||||
Copyright (c) 2004, 2005, 2006 Python Software Foundation.
|
||||
All rights reserved.
|
||||
*/
|
||||
|
||||
|
@ -199,7 +199,7 @@ static PyGetSetDef partial_getsetlist[] = {
|
|||
static PyTypeObject partial_type = {
|
||||
PyObject_HEAD_INIT(NULL)
|
||||
0, /* ob_size */
|
||||
"functional.partial", /* tp_name */
|
||||
"functools.partial", /* tp_name */
|
||||
sizeof(partialobject), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
/* methods */
|
||||
|
@ -245,14 +245,14 @@ static PyTypeObject partial_type = {
|
|||
/* module level code ********************************************************/
|
||||
|
||||
PyDoc_STRVAR(module_doc,
|
||||
"Tools for functional programming.");
|
||||
"Tools that operate on functions.");
|
||||
|
||||
static PyMethodDef module_methods[] = {
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
PyMODINIT_FUNC
|
||||
initfunctional(void)
|
||||
init_functools(void)
|
||||
{
|
||||
int i;
|
||||
PyObject *m;
|
||||
|
@ -262,7 +262,7 @@ initfunctional(void)
|
|||
NULL
|
||||
};
|
||||
|
||||
m = Py_InitModule3("functional", module_methods, module_doc);
|
||||
m = Py_InitModule3("_functools", module_methods, module_doc);
|
||||
if (m == NULL)
|
||||
return;
|
||||
|
|
@ -313,7 +313,7 @@ SOURCE=..\..\Objects\funcobject.c
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\Modules\functionalmodule.c
|
||||
SOURCE=..\..\Modules\_functoolsmodule.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ extern void initparser(void);
|
|||
extern void init_winreg(void);
|
||||
extern void init_struct(void);
|
||||
extern void initdatetime(void);
|
||||
extern void initfunctional(void);
|
||||
extern void init_functools(void);
|
||||
extern void initzlib(void);
|
||||
|
||||
extern void init_multibytecodec(void);
|
||||
|
@ -132,7 +132,7 @@ struct _inittab _PyImport_Inittab[] = {
|
|||
{"_winreg", init_winreg},
|
||||
{"_struct", init_struct},
|
||||
{"datetime", initdatetime},
|
||||
{"functional", initfunctional},
|
||||
{"_functools", init_functools},
|
||||
|
||||
{"xxsubtype", initxxsubtype},
|
||||
{"zipimport", initzipimport},
|
||||
|
|
|
@ -515,10 +515,7 @@
|
|||
RelativePath="..\Objects\funcobject.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\Modules\functionalmodule.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\Modules\functionalmodule.c">
|
||||
RelativePath="..\Modules\_functoolsmodule.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\Python\future.c">
|
||||
|
|
4
setup.py
4
setup.py
|
@ -377,8 +377,8 @@ class PyBuildExt(build_ext):
|
|||
exts.append( Extension("_heapq", ["_heapqmodule.c"]) )
|
||||
# operator.add() and similar goodies
|
||||
exts.append( Extension('operator', ['operator.c']) )
|
||||
# functional
|
||||
exts.append( Extension("functional", ["functionalmodule.c"]) )
|
||||
# _functools
|
||||
exts.append( Extension("_functools", ["_functoolsmodule.c"]) )
|
||||
# Python C API test module
|
||||
exts.append( Extension('_testcapi', ['_testcapimodule.c']) )
|
||||
# profilers (_lsprof is for cProfile.py)
|
||||
|
|
Loading…
Reference in New Issue