关于python:如何将变量数的参数格式化为字符串?

python - How to format variable number of arguments into a string?

我们知道,可以使用字符串中的一个%s来格式化一个参数:

1
2
>>>"Hello %s" %"world"
'Hello world'

对于两个参数,我们可以使用两个%s(duh!):

1
2
>>>"Hello %s, %s" % ("John","Joe")
'Hello John, Joe'

那么,如何在不必在基字符串中显式定义与要格式化的参数数目相等的数目的参数的情况下格式化变量个数的参数呢?如果存在这样的情况,那将是非常酷的:

1
2
3
4
>>>"Hello <cool_operator_here>" % ("John","Joe","Mary")
Hello JohnJoeMary
>>>"Hello <cool_operator_here>" % ("John","Joe","Mary","Rick","Sophie")
Hello JohnJoeMaryRickSophie

这是可能的,还是我唯一能做的就是:

1
2
3
4
>>> my_args = ["John","Joe","Mary"]
>>> my_str ="Hello" + ("".join(["%s"] * len(my_args)))
>>> my_str % tuple(my_args)
"Hello JohnJoeMary"

注意:我需要使用%s字符串格式化操作符。

更新:

它需要与%s一起使用,因为来自另一个库的函数使用该运算符格式化我的字符串,因为我传递了未格式化的字符串和参数来格式化它,但是它在实际进行格式化之前对参数进行了一些检查和更正(如果需要)。

所以我要称之为:

1
2
>>> function_in_library("Hello <cool_operator_here>", ["John","Joe","Mary"])
"Hello JohnJoeMary"

谢谢你的帮助!


在列表中使用str.join()而不使用字符串格式,然后插入结果:

1
"Hello %s" % ', '.join(my_args)

演示:

1
2
3
>>> my_args = ["foo","bar","baz"]
>>>"Hello %s" % ', '.join(my_args)
'Hello foo, bar, baz'

如果您的一些参数还不是字符串,请使用列表理解:

1
2
3
>>> my_args = ["foo","bar", 42]
>>>"Hello %s" % ', '.join([str(e) for e in my_args])
'Hello foo, bar, 42'

或使用map(str, ...)

1
2
>>>"Hello %s" % ', '.join(map(str, my_args))
'Hello foo, bar, 42'

你也可以这样做:

1
function_in_library("Hello %s", ', '.join(my_args))

如果您受到(相当任意的)限制,不能在插值参数列表中使用join,请使用join创建格式化字符串:

1
function_in_library("Hello %s" % ', '.join(['%s'] * len(my_args)), my_args)