We know that formatting one argument can be done using one %s
in a string:
>>> "Hello %s" % "world"
'Hello world'
for two arguments, we can use two %s
(duh!):
>>> "Hello %s, %s" % ("John", "Joe")
'Hello John, Joe'
So, how can I format a variable number of arguments without having to explicitly define within the base string a number of %s
equal to the number of arguments to format? it would be very cool if something like this exists:
>>> "Hello <cool_operator_here>" % ("John", "Joe", "Mary")
Hello JohnJoeMary
>>> "Hello <cool_operator_here>" % ("John", "Joe", "Mary", "Rick", "Sophie")
Hello JohnJoeMaryRickSophie
Is this even possible or the only thing I could do about it is to do something like:
>>> my_args = ["John", "Joe", "Mary"]
>>> my_str = "Hello " + ("".join(["%s"] * len(my_args)))
>>> my_str % tuple(my_args)
"Hello JohnJoeMary"
NOTE: I need to do it with the %s
string formatting operator.
UPDATE:
It needs to be with the %s
because a function from another library formats my string using that operator given that I pass the unformatted string and the args to format it, but it makes some checking and corrections (if needed) on the args before actually making the formatting.
So I need to call it:
>>> function_in_library("Hello <cool_operator_here>", ["John", "Joe", "Mary"])
"Hello JohnJoeMary"
Thanks for your help!
You'd use
str.join()
on the list without string formatting, then interpolate the result:Demo:
If some of your arguments are not yet strings, use a list comprehension:
or use
map(str, ...)
:You'd do the same with your function:
If you are limited by a (rather arbitrary) restriction that you cannot use a
join
in the interpolation argument list, use ajoin
to create the formatting string instead: