Why does this (not) work?
Cliff Wells
logiplex at qwest.net
Tue Aug 19 17:54:34 EDT 2003
On Tue, 2003-08-19 at 14:25, Michael C. Neel wrote:
> I've got this string in which I need to sub in the same word several
> times; i.e:
>
> >>> "%s - %s - %s" % ("test","test","test")
> 'test - test - test'
> >>>
>
> But I want to use the * to make life easier to read, so I tried:
>
> >>> ("test",)*3
> ('test', 'test', 'test')
> >>> "%s - %s - %s" % ("test",)*3
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> TypeError: not enough arguments for format string
> >>>
> Any idea why the tuple to str to tuple works and not the tuple straight?
Because % has higher precedence than * (or rather they have equal
precedence and the expression is evaluated left to right) so the
expression becomes
("%s - %s - %s" % ("test",)) * 3
when what you meant was
"%s - %s - %s" % (("test",) * 3)
Here's another approach:
>>> def fjoin(sep, s, n):
... return sep.join(["%s"] * n) % ((s,) * n)
...
>>> fjoin(' - ', "test", 3)
'test - test - test'
Regards,
--
Cliff Wells, Software Engineer
Logiplex Corporation (www.logiplex.net)
(503) 978-6726 (800) 735-0555
More information about the Python-list
mailing list