如何根据任意数量的参数使字符串动态化?
特别是这个返回字符串:
return '{0} {1} {2} "{3} {4} {5} {6}"'.format(params[0], params[1], params[2], params[3], params[4], params[5], params[6])
它需要能够处理引号之间的4到7个参数,当我添加{7}
和params[7]
时,如果只有4个参数,我会得到IndexError
引号(总共7个参数)。
TIA
答案 0 :(得分:1)
print '{0} "{1}"'.format(' '.join(params[:3]), ' '.join(params[3:]))
但我会建议你不要试图坚持使用oneliner。分别制作两个不同的部分,然后通过.format
进行汇编。
这将更具可读性(甚至变量名称记录您的代码),以后更容易维护。
一种方法是使用字典:
data = {
'first_part' : ' '.join(params[:3]),
'quoted_part': ' '.join(params[3:])
}
print '{first_part} "{quoted_part}"'.format(**data)
如果你想在屏幕上打印这些东西,这很有效。请记住,这不是组装shell命令或数据库查询的安全方法!
答案 1 :(得分:0)
str = '{} {} {} " ' + '{} '*(len(params)-3) +'"'
return str.format(*params)
更新后没有额外的空格:
str = '{} {} {} "' + ' '.join(['{}']*(len(params)-3)) +'"'
return str.format(*params)
>>>params=[1,2,3,4,5,6,7]
输出
'1 2 3 "4 5 6 7"'
' '.join(['{}']*(len(params)-3))
创建一个'{}'
字符串,len(params)-3
决定它们的数量。
*params
表示一组参数。在这里,它将把参数解包成一组参数。 param[0]
是第一个参数,param[1]
是第二个参数....然后他们会用{}
填充其值。
答案 2 :(得分:0)
以下似乎有点简单但有效:
#!/bin/python
params = [1, 2, 3]
mystr = '%s ' * len(params) % tuple(params)
......虽然它确实有一个尾随空格。要摆脱它,你可以使用一些有点丑陋的东西:
mystr = ('%s ' * (len(params)-1) + "%s") % tuple(params)
这假设旧的%插值已足够,并且您不需要 .format()方法提供的任何特殊功能。