John Posner wrote:
Investigating how this fact fit in with the current thread, I came up
with an alternative to the three levels of "def" (pronounced "three
levels of death"). Following is code for two decorators:
* the first one encloses the output of a function with lines of "#"
characters, and is used like this:
@enclose
myfun(...
* the second one encloses the output of a function with lines of a
user-specified character, and is used like this:
@enclose("&")
myfun(...
Here's the Python2 code for each one:
[snippety-snip]
How about just having one bit of code that works either way?
8<------------------------------------------------------------------
class enclose(object):
def __init__(self, char='#'):
self.char = char
if callable(char): # was a function passed in directly?
self.char = '#' # use default char
self.func = char
def __call__(self, func=None):
if func is None:
return self._call()
self.func = func
return self
def _call(self):
print("\n" + self.char * 50)
self.func()
print(self.char * 50 + '\n')
if __name__ == '__main__':
@enclose
def test1():
print('Spam!')
@enclose('-')
def test2():
print('Eggs!')
test1()
test2()
8<------------------------------------------------------------------
Output:
##################################################
Spam!
##################################################
--------------------------------------------------
Eggs!
--------------------------------------------------
8<------------------------------------------------------------------
~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list