2013-06-12 35 views
5

我有一个格式字符串,我根据用户输入动态创建。我正在收集列表中格式字符串的参数,并且我想知道如何在格式字符串的末尾解压缩它们。我看到了一些与此相关的问题,但我对Python很陌生,似乎无法将他们的解决方案应用于我的案例。Python解压缩格式字符串的参数列表

的想什么,我做的想法是:

my_string = "string contents" % tuple([for item in var_array]) 

当然,这不是有效的语法,但希望它描述了我想做的事:我想解压var_array为我的参数列表不知道var_array的长度。我怎么能这样做?

编辑: 我会尝试更好地解释我的问题。我通过连接未知数量的格式字符串来创建格式字符串。因此,我的最后一个字符串将有一个可变数量的%s,因此列表中会收集可变数量的参数。

例如:

"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 

格式字符串的长度,以及参数的数目是基于用户输入变量,所以我希望能够在所述端部ARGS的名单上钉最终字符串。这可能吗?

+0

对不起,不明白。你能提供一些前后例子吗? –

+0

我试图澄清...... – jac300

回答

5

下面是从参数去格式化字符串(仍需要错误检查)的方法:

>>> def StartDance(*args): 
     return "%d, %d, %d, %d!" % tuple(args) 

>>> StartDance(5, 6, 7, 8) 
'5, 6, 7, 8!' 

这里一个更强大的错误检查解决方案,但我将它作为一个单独的答案来考虑,并考虑添加多少额外的复杂性:

>>> 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!' 

这里是返回正在被解开作为参数只能对有这些论点当作一个列表列表的功能(Python是乐趣:)

>>> StartDance(*range(5,9)) 
'5, 6, 7, 8!' 
+0

啊,这可能是OP想要的。 +1 –

+0

啊好的...我现在看到这是如何适用的。我错误地考虑了这个问题。谢谢。 – jac300

+0

好的,但是如果我想将一个列表传递给该函数,那么该怎么办?就像我这样做:StartDance(*范围(len(my_array)))...返回数组的索引,但我可以传入一个数组,使它回吐其连接的内容? – jac300

3

你很近,尝试这样的事情: "%s my %s is %s" % tuple(["Hi", "name", "butch"])

+1

_不知道var_array的时间提前_ – zondo

2

假设你想为一个字符串什么支持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')) 

日期:

1 2 3 4 5 6 
1 2 3 4 

您也可以使用下面的更灵活的字符串:

def join_args(fmstr, *args): 
    return fmstr.format(*args) 

print(join_args("One: {} Two: {} Three: {} Four: {}", 1,2,3,4)) 

日期:

One: 1 Two: 2 Three: 3 Four: 4 

只要确保有指定参数和{}同等数量。