[Python-checkins] python/nondist/peps pep-0309.txt,1.3,1.4
goodger at users.sourceforge.net
goodger at users.sourceforge.net
Sat Feb 21 11:32:34 EST 2004
Update of /cvsroot/python/python/nondist/peps
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22504
Modified Files:
pep-0309.txt
Log Message:
update from Peter Harris
Index: pep-0309.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/peps/pep-0309.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** pep-0309.txt 11 Mar 2003 04:49:44 -0000 1.3
--- pep-0309.txt 21 Feb 2004 16:32:30 -0000 1.4
***************
*** 1,4 ****
PEP: 309
! Title: Built-in Curry Type
Version: $Revision$
Last-Modified: $Date$
--- 1,4 ----
PEP: 309
! Title: Function Currying
Version: $Revision$
Last-Modified: $Date$
***************
*** 15,25 ****
========
! This proposal is for a standard curry type for Python that
allows a new callable to be constructed from a callable and a
partial argument list (including positional and keyword arguments).
Note: after feedback on comp.lang.python, I am persuaded that the most
! accurate term for this is a 'curry' rather than a 'closure', so the
! terminology has been amended since the first version of this PEP.
I propose a standard library module called "functional", to hold useful
--- 15,25 ----
========
! This proposal is for a curry constructor for Python that
allows a new callable to be constructed from a callable and a
partial argument list (including positional and keyword arguments).
Note: after feedback on comp.lang.python, I am persuaded that the most
! accurate term for this is a 'curry', so the terminology has been
! amended since the first version of this PEP.
I propose a standard library module called "functional", to hold useful
***************
*** 41,49 ****
thing when presented with a functor and less arguments than expected.
! Python has more flexible argument-passing, and so curries cannot be
! implicit in the same way. Instead of using them, a Python programmer
will probably either define another named function or use a lambda.
! But lambda syntax is horrible, especially when you want to do
! something complex.
We need something better.
--- 41,48 ----
thing when presented with a functor and less arguments than expected.
! Python has more flexible argument-passing, and so function currying cannot
! be implicit in the same way. Instead, a Python programmer
will probably either define another named function or use a lambda.
! But lambda syntax is not to everyone's taste, to say the least.
We need something better.
***************
*** 53,72 ****
=========
! Here is one way to do a curry in Python::
class curry(object):
! def __init__(self, fn, *args, **kw):
! self.fn, self.args, self.kw = (fn, args, kw)
def __call__(self, *args, **kw):
! if self.kw:
d = self.kw.copy()
d.update(kw)
else:
! d = kw
return self.fn(*(self.args + args), **d)
! Note that when the curry is called, positional arguments are
appended to those provided to the constructor, and keyword arguments
override and augment those provided to the constructor.
--- 52,74 ----
=========
! Here is one way to do a create a curried callable in Python. The
! implementation below is based on improvements provided by Scott David
! Daniels::
class curry(object):
! def __init__(*args, **kw):
! self = args[0]
! self.fn, self.args, self.kw = (args[1], args[2:], kw)
def __call__(self, *args, **kw):
! if kw and self.kw:
d = self.kw.copy()
d.update(kw)
else:
! d = kw or self.kw
return self.fn(*(self.args + args), **d)
! Note that when the curried function is called, positional arguments are
appended to those provided to the constructor, and keyword arguments
override and augment those provided to the constructor.
***************
*** 76,81 ****
Label class, but with a blue foreground by default.
! I think a built-in type called ``curry``, that behaves the same way
! but maybe implemented more efficiently, would be very useful.
Update: a recipe almost exactly like this has been in the Python
--- 78,83 ----
Label class, but with a blue foreground by default.
! I think a built-in class called ``curry`` that behaves the same way
! would be very useful.
Update: a recipe almost exactly like this has been in the Python
***************
*** 123,127 ****
nextarg = sys.argv.pop@(0)
! It has not been well-received, so I am not pursuing this as a serious
proposal.
--- 125,129 ----
nextarg = sys.argv.pop@(0)
! It has not been well-received, so I withdraw this part of the
proposal.
***************
*** 202,208 ****
The performance gain in Pyrex is less than 100% over the nested function
implementation, since to be fully general it has to operate by Python API
! calls. Any C implementation will be unlikely to be much faster, so the
! case for a builtin coded in C is not very strong.
!
--- 204,209 ----
The performance gain in Pyrex is less than 100% over the nested function
implementation, since to be fully general it has to operate by Python API
! calls. For the same reason, a C implementation will be unlikely to be much
! faster, so the case for a built-in coded in C is not very strong.
***************
*** 210,226 ****
=======
! I prefer that curry should be a built-in, with the semantics as
! described, whether as a function or a class. However, it should do its
! apprenticeship in the standard library first.
The standard library module ``functional`` should contain ``curry`` and
``rightcurry`` classes, and any other higher-order functions the community
! want. These other functions fall outside this PEP though.
The @ syntax proposal is withdrawn.
- Since this proposal is now much less ambitious, I'd like to aim for
- inclusion in Python 2.3.
-
Copyright
--- 211,224 ----
=======
! I prefer that some means to curry functions should be a built-in, with the
! semantics as described, whether as a function or a callable class. However,
! it should do its apprenticeship in the standard library first.
The standard library module ``functional`` should contain ``curry`` and
``rightcurry`` classes, and any other higher-order functions the community
! want. Other functions that might belong there fall outside this PEP though.
The @ syntax proposal is withdrawn.
Copyright
More information about the Python-checkins
mailing list