pep 336: Make None Callable

The Eternal Squire eternalsquire at comcast.net
Wed Nov 3 22:59:43 EST 2004


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