[print >>] None

Huaiyu Zhu huaiyu at gauss.almadan.ibm.com
Wed Oct 24 21:07:35 CEST 2001


On 23 Oct 2001 23:10:39 -0400, Barry A. Warsaw <barry at zope.com> wrote:

>Neither was I <wink>.  I lobbied for "print >> None" to be morally
>equivalent to:
>
>class Devnull:
>...  def write(self, s): pass
>... 
>>>> devnull = Devnull()
>>>> print >> devnull, 'this goes no where'
>>>> 
>
>but lost that argument.  I've never had a use for current
>print>>None's semantics but I've had one or two situations where
>printing to a null sink was handy (e.g. doing verbose prints that get
>turned off with a --quiet flag).
>

For quite some time I've been using one object for all these sort of things,
including terminating linked lists, etc.  

class Nothing:
    def __str__(self): return ""
    def __repr__(self): return "nothing"
    def __call__(self, *args, **keys): return nothing
    def __len__(self): return 0
    def __nonzero__(self): return 0
    def __setitem__(self, i, x): raise IndexError
    def __getitem__(self, i): raise IndexError
    def __setattr__(self, name, val): return nothing
    def __getattr__(self, name): return nothing

nothing = Nothing()

if __name__ == "__main__":
    print nothing is nothing
    print nothing
    print `nothing`
    print nothing(1, 2, a=3, b=4)
    nothing.abc = 123
    print nothing.abc
    print >> nothing, "This goes nowhere"
    if nothing: print 456
    for x in nothing: print x
    nothing[0] = 3


nothing-beats-it-ly y'rs

Huaiyu



More information about the Python-list mailing list