我有这个遗留的Jython字符串,现在我需要在字符串中替换它服务器A和服务器B用一个动态值我不知道该怎么重复这个可笑的方法哪些值重复自身
如何添加两个新的动态值:需要替换的server_a_name和server_b_name:服务器A和服务器B
params = '[ -JSPs '
'-MapRes ['
'%s] '
'-Servers ['
'[ "Server A" x=%s,y=%s,z=%s ]'
'[ "Server B" x=%s,y=%s,z=%s ]] '
'-MapVH ['
'[ "Server A" host ]'
'[ "Server B" host ]] '
'-ZZ ['
'[ "Server A" true ]'
'[ "Server B" true ]] '
']]'%(ref, Name_1, Name_2, Name_3, Name_1, Name_2, Name_3)
UPDATE很抱歉是Jython,而不是类似于python 2.7 的python
如果是python 3.4+,则应该使用f字符串
params = '[ -JSPs '
'-MapRes ['
f'{ref}] '
'-Servers ['
f'[ "Server A" x={Name_1},y={Name_2},z={Name_3} ]'
f'[ "Server B" x={Name_1},y={Name_2},z={Name_3} ]] '
'-MapVH ['
'[ "Server A" host ]'
'[ "Server B" host ]] '
'-ZZ ['
'[ "Server A" true ]'
'[ "Server B" true ]] '
']]'
您显示的代码使用python的旧的类似printf
的替换。现在,在python 3中,实现这一点的方法是使用f-string,它允许您直接插入变量:
server_a_name = 'Server A'
server_b_name = 'Server B'
params = '[ -JSPs '
'-MapRes ['
f'{ref}] '
'-Servers ['
f'[ "{server_a_name}" x={Name_1},y={Name_2},z={Name_3} ]'
f'[ "{server_b_name}" x={Name_1},y={Name_2},z={Name_3} ]] '
'-MapVH ['
f'[ "{server_a_name}" host ]'
f'[ "{server_b_name}" host ]] '
'-ZZ ['
f'[ "{server_a_name}" true ]'
f'[ "{server_b_name}" true ]] '
']]'
有些重复在这里是不可避免的,因为您想要创建的字符串本质上是重复的。但这允许您在字符串中使用变量名,而不是在末尾提供所有变量的列表。
一个即使适用于python 2变体的解决方案是str.format()
,它允许您使用类似的语法,并在末尾提供变量名。您仍然需要将它们全部列出(可以将其视为将它们从字符串的名称空间外部转移到内部(,但每个只能列出一次:
params = ('[ -JSPs '
'-MapRes ['
'{ref}] '
'-Servers ['
'[ "{server_a_name}" x={Name_1},y={Name_2},z={Name_3} ]'
'[ "{server_b_name}" x={Name_1},y={Name_2},z={Name_3} ]] '
'-MapVH ['
'[ "{server_a_name}" host ]'
'[ "{server_b_name}" host ]] '
'-ZZ ['
'[ "{server_a_name}" true ]'
'[ "{server_b_name}" true ]] '
']]'
).format(
server_a_name=server_a_name,
server_b_name=server_b_name,
ref=ref,
Name_1=Name_1, Name_2=Name_2, Name_3=Name_3
)