[Python-Dev] Replacement for print in Python 3.0

Steven Bethard steven.bethard at gmail.com
Fri Sep 2 16:46:58 CEST 2005


Charles Cazabon wrote:
> Fredrik Lundh <fredrik at pythonware.com> wrote:
> > next use case:
> >
> >     print 'foo:', foo, 'bar:', bar, 'baz:', baz,
> >     if frobble > 0:
> >         print 'frobble', frobble
> >     else:
> >         print 'no frobble today'
> 
> The need to print /and/ not add a newline isn't nearly as common.  print()
> could take a keyword parameter to skip the newline, or ...
> 
>   print('foo:', foo, 'bar:', bar, 'baz:', baz,
>         frobble and 'frobble: ' + frobble or 'no frobble today')
> 
> Or the user can just use stdout.write and have full control.

Or you can easily refactor your code to do the print in one line:

    if frobble > 0:
        frobble_str = 'frobble: ' + frobble
    else:
        frobble_str = 'no frobble today'
    print('foo:', foo, 'bar:', bar, 'baz:', baz, frobble_str)

or similarly:

    if frobble > 0:
        rest = ['frobble', frobble]
    else:
        rest = ['no frobble today']
    print('foo:', foo, 'bar:', bar, 'baz:', baz, *rest)

I don't know which refactoring you'd prefer, but there are at least a
few options here.  In the first one you have to be careful to add the
extra space yourself.  In the second one, you have to know how *args
work.  But I would claim that the extra mental burden of manually
adding a space or understanding *args is about equivalent to the
current mental burden of print's trailing-comma behavior.

I also find it more obvious in both refactored examples that the print
produces exactly one line.

Of course, there are examples that don't refactor so easily.  Here's one:

    for i, obj in enumerate(objs):
        # do stuff
        print i, obj,
        # do more stuff
    print

If the "do stuff" and "do more stuff" sections are empty, you can
write it as something like:

    print(*[item for tup in enumerate(objs) for item in tup])

But it's clearly not as beginner-friendly, requiring knowledge of
*args and list comprehensions.  OTOH, I'd claim that if you need such
exacting format, you're not doing beginner stuff anyway.  But YMMV.

STeVe
-- 
You can wordify anything if you just verb it.
        --- Bucky Katt, Get Fuzzy


More information about the Python-Dev mailing list