[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
        frobble_str = 'no frobble today'
    print('foo:', foo, 'bar:', bar, 'baz:', baz, frobble_str)

or similarly:

    if frobble > 0:
        rest = ['frobble', frobble]
        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

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.

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

More information about the Python-Dev mailing list