我有一个格式字符串,我根据用户输入动态创建.我正在列表中收集格式字符串的参数,我想知道如何在格式字符串的末尾解压缩它们.我已经看到了一些与此相关的问题,但我对Python很新,我似乎无法将他们的解决方案应用到我的案例中.
我想做的是:
my_string = "string contents" % tuple([for item in var_array])
Run Code Online (Sandbox Code Playgroud)
当然这不是有效的语法,但希望它描述了我想要做的事情:我想在不知道var_array的长度的情况下解压缩var_array作为我的参数列表.我怎么能这样做?
编辑: 我会尝试更好地解释我的问题.我正在通过连接未知数量的格式字符串来创建格式字符串.因此,我的最终字符串将具有可变数量的%s,因此在列表中收集可变数量的args.
例如:
"My format string might have %s or %s arguments" %([arg_list]) //here arg_list has 2 arguments
"But my format string might also have %s or %s or %s arguments. %([arg_list]) //here arg_list has 3 arguments
Run Code Online (Sandbox Code Playgroud)
格式字符串的长度和参数的数量根据用户输入而变化,因此我希望能够在最终字符串末尾添加args列表.这可能吗?
这是一种从参数到格式化字符串的方法(仍然需要进行错误检查):
>>> def StartDance(*args):
return "%d, %d, %d, %d!" % tuple(args)
>>> StartDance(5, 6, 7, 8)
'5, 6, 7, 8!'
Run Code Online (Sandbox Code Playgroud)
这是一个更强大的错误检查解决方案,但我将它作为一个单独的答案,考虑它添加了多少额外的复杂性:
>>> def StartDance(*args):
return (", ".join(["%d"] * len(args))+"!") % tuple(args)
>>> StartDance(5, 6, 7, 8)
'5, 6, 7, 8!'
>>> StartDance(5, 6, 7, 8, 9, 10)
'5, 6, 7, 8, 9, 10!'
>>> StartDance(1)
'1!'
Run Code Online (Sandbox Code Playgroud)
这里有一个函数返回一个列表,该列表被解压缩为参数,只是将这些参数视为列表(Python很有趣:)
>>> StartDance(*range(5,9))
'5, 6, 7, 8!'
Run Code Online (Sandbox Code Playgroud)
假设您要制作的字符串支持str内置函数,您可以执行以下操作:
def join_args(*args):
return " ".join([str(x) for x in args])
print(join_args(1,2,3,4,5,6))
print(join_args('1','2','3','4'))
Run Code Online (Sandbox Code Playgroud)
出去:
1 2 3 4 5 6
1 2 3 4
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下内容来获得更灵活的字符串:
def join_args(fmstr, *args):
return fmstr.format(*args)
print(join_args("One: {} Two: {} Three: {} Four: {}", 1,2,3,4))
Run Code Online (Sandbox Code Playgroud)
出去:
One: 1 Two: 2 Three: 3 Four: 4
Run Code Online (Sandbox Code Playgroud)
只需确保 args 和 的数量相同{}。