python-peps/pep-0336.txt

131 lines
2.9 KiB
Plaintext
Raw Normal View History

PEP: 336
Title: Make None Callable
Version: $Revision$
Last-Modified: $Date$
Author: Andrew McClelland
2005-06-17 14:27:15 -04:00
Status: Rejected
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.
2005-06-17 13:43:00 -04:00
BDFL Pronouncement
This PEP is rejected. It is considered a feature that None raises
an error when called. The proposal falls short in tests for
obviousness, clarity, explictness, and necessity. The provided Switch
example is nice but easily handled by a simple lambda definition.
See python-dev discussion on 17 June 2005.
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: