> My approach to dealing with this slight misfeature (python's desire to
> print what remains on a line) is:
>
> a) When forced to, assign the return value to a garbage
> temporary variable.
>
> b) When I define a class, I add an "ignore()" method which
> returns None :-)
>
> Approach a is pretty sub-optimal, as it waste an entry in the dictionary,
> takes the time to do unnecessary assignment, etc.
>
> For example of approach b, in my profiler, I can write lines such as:
>
> Stats('profile.1').sort_stats(1).print_stats().ignore()
>
> I can believe that some folks will see the above as an aberration of
> nature, but I find it very readable. :-) :-)
>
An alternative, which *I* think is more obvious of intent is:
>>> Stats('profile.1').sort_stats(1).print_stats() and None
>>>
( See: The Collected Obfuscated Python of S.D.Majewski, vol V. )
Just make certain not to swap them!
>>> None and Stats('profile.1').sort_stats(1).print_stats()
is ALSO a non printing statement with different effects.
I thought perhaps we could use the difference between an
objects __repr__ and its __str__ methods to pull a fast one,
but:
>>> from obj import *
>>> class Thing( Object ):
... def __repr__( self ): return None
... def __str__( self ): return repr( self._obj )
...
>>> a = Thing( 1 )
>>> a
Traceback (innermost last):
File "<stdin>", line 1
TypeError: repr not string
The return value has to be a *string*, and:
>>> class Othing( Object ):
... def __repr__( self ) : return ''
... def __str__( self ): return repr( self._obj )
...
>>> o = Othing( 1 )
>>> o
>>> print o
1
A NULL string still prints the empty string and a newline.
[ Class Object() is an Ultra, Ultra Secret project that,
other than myself, only Tommy knows about!
But I suspect that Tim can guess...
We'll just have to have him shot! ;-) ]
- Steve Majewski (804-982-0831) <sdm7g@Virginia.EDU>
- UVA Department of Molecular Physiology and Biological Physics