pep 336: Make None Callable
John Roth
newsgroups at jhrothjr.com
Thu Nov 4 07:03:56 EST 2004
This is simply propagating the
effect of a null pointer in C.
That's what the null object
pattern is for.
John Roth
"The Eternal Squire" <eternalsquire at comcast.net> wrote in message
news:dv6dndASE7CxNBTcRVn-pw at comcast.com...
> PEP: 336
> Title: Make None Callable
> Version: $Revision: 1.1 $
> Last-Modified: $Date: 2004/11/03 16:58:30 $
> Author: Andrew McClelland
> Status: Draft
> Type: Standards Track
> Content-Type: text/plain
> Created: 28-Oct-2004
> Post-History:
>
>
> Abstract
>
> None should be a callable object that when called with any
> arguments has no side effect and returns None.
>
>
> Motivation
>
> To allow a programming style for selectable actions that is more
> in accordance with the minimalistic functional programming goals
> of the Python language.
>
>
> Rationale
>
> Allow the use of None in method tables as a universal no effect
> rather than either (1) checking a method table entry against None
> before calling, or (2) writing a local no effect method with
> arguments similar to other functions in the table.
>
> The semantics would be effectively,
>
> class None:
>
> def __call__(self, *args):
> pass
>
>
> How To Use
>
> Before, checking function table entry against None:
>
> class Select:
>
> def a(self, input):
> print 'a'
>
> def b(self, input):
> print 'b'
>
> def c(self, input);
> print 'c'
>
> def __call__(self, input):
> function = { 1 : self.a,
> 2 : self.b,
> 3 : self.c
> }.get(input, None)
> if function: return function(input)
>
> Before, using a local no effect method:
>
> class Select:
>
> def a(self, input):
> print 'a'
>
> def b(self, input):
> print 'b'
>
> def c(self, input);
> print 'c'
>
> def nop(self, input):
> pass
>
> def __call__(self, input):
> return { 1 : self.a,
> 2 : self.b,
> 3 : self.c
> }.get(input, self.nop)(input)
>
> After:
>
> class Select:
>
> def a(self, input):
> print 'a'
>
> def b(self, input):
> print 'b'
>
> def c(self, input);
> print 'c'
>
> def __call__(self, input):
> return { 1 : self.a,
> 2 : self.b,
> 3 : self.c
> }.get(input, None)(input)
>
>
> References
>
> [1] Python Reference Manual, Section 3.2,
> http://docs.python.org/ref/ref.html
>
>
> Copyright
>
> This document has been placed in the public domain.
>
>
>
> Local Variables:
> mode: indented-text
> indent-tabs-mode: nil
> sentence-end-double-space: t
> fill-column: 70
> End:
More information about the Python-list
mailing list