views:

169

answers:

2

I do this a lot in Perl:

printf "%8s %8s %8s\n", qw(date price ret);

However, the best I can come up with in Python is

print '%8s %8s %8s' % (tuple("date price ret".split()))

I'm just wondering if there is a more elegant way of doing it? I'm fine if you tell me that's it and no improvement can be made.

+11  A: 

Well, there's definitely no way to do exactly what you can do in Perl, because Python will complain about undefined variable names and a syntax error (missing comma, perhaps). But I would write it like this (in Python 2.X):

print '%8s %8s %8s' % ('date', 'price', 'ret')

If you're really attached to Perl's syntax, I guess you could define a function qw like this:

def qw(s):
    return tuple(s.split())

and then you could write

print '%8s %8s %8s' % qw('date price ret')

which is basically Perl-like except for the one pair of quotes on the argument to qw. But I'd hesitate to recommend that. At least, don't do it only because you miss Perl - it only enables your denial that you're working in a new programming language now ;-) It's like the old story about Pascal programmers who switch to C and create macros

#define BEGIN {
#define END   }
David Zaslavsky
To be sure, I was explicitly trying to get around typing quotes around each word. The word list usually runs in the neighborhood of 15-20, hence the need for qw() in the first place.
Zhang18
Well, I think the usual Python way to do it is just suck it up and type the quotes - after all, you only have to do it once. But I don't suppose there's anything really _wrong_ with using this `qw` function. It might confuse anyone who reads your source code who isn't familiar with Perl, but if you can live with that, go right ahead.
David Zaslavsky
A: 

"date price ret".split()

masonk