Jython或python2.7的字符串连接方法比传统的字符串连接更好



我有这个遗留的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
)

最新更新