我们知道格式化 一个 参数可以在字符串中使用 一个 参数来完成%s:
%s
>>> "Hello %s" % "world" 'Hello world'
对于两个参数,我们可以使用两个%s(duh!):
>>> "Hello %s, %s" % ("John", "Joe") 'Hello John, Joe'
因此,如何在 不显式定义基本字符串的数量%s等于要_格式化的参数数量的 _情况下 格式化可变数量的参数?如果存在这样的东西,那就太酷了:
>>> "Hello <cool_operator_here>" % ("John", "Joe", "Mary") Hello JohnJoeMary >>> "Hello <cool_operator_here>" % ("John", "Joe", "Mary", "Rick", "Sophie") Hello JohnJoeMaryRickSophie
这是否有可能或者我唯一能做的就是做类似的事情:
>>> my_args = ["John", "Joe", "Mary"] >>> my_str = "Hello " + ("".join(["%s"] * len(my_args))) >>> my_str % tuple(my_args) "Hello JohnJoeMary"
注意:我 需要 使用%s字符串格式运算符。
更新 :
它必须与一起使用,%s因为另一个库中的函数使用该运算符来格式化我的字符串,因为我传递了未格式化的字符串和用于格式化它的args,但是在实际制作之前,它会对args进行了一些检查和更正(如果需要)。格式化。
所以我需要调用它:
>>> function_in_library("Hello <cool_operator_here>", ["John", "Joe", "Mary"]) "Hello JohnJoeMary"
谢谢你的帮助!
您可以str.join()在列表中使用 不带 字符串格式的内容,然后对 结果 进行插值:
str.join()
"Hello %s" % ', '.join(my_args)
演示:
>>> my_args = ["foo", "bar", "baz"] >>> "Hello %s" % ', '.join(my_args) 'Hello foo, bar, baz'
如果您的某些参数还不是字符串,请使用列表理解:
>>> my_args = ["foo", "bar", 42] >>> "Hello %s" % ', '.join([str(e) for e in my_args]) 'Hello foo, bar, 42'
或使用map(str, ...):
map(str, ...)
>>> "Hello %s" % ', '.join(map(str, my_args)) 'Hello foo, bar, 42'
您将对函数执行相同的操作:
function_in_library("Hello %s", ', '.join(my_args))
如果受(相当随意的)限制的限制,您不能join在插值参数列表中使用a,请改用ajoin来创建格式字符串:
join
function_in_library("Hello %s" % ', '.join(['%s'] * len(my_args)), my_args)