Jython 或 python 2.7 比传统字符串连接更好的字符串连接方法
Posted
技术标签:
【中文标题】Jython 或 python 2.7 比传统字符串连接更好的字符串连接方法【英文标题】:Jython or python 2.7 better string concatenation method to legacy string concatenation 【发布时间】:2021-02-24 12:24:09 【问题描述】:我有这个旧的 Jython 字符串,现在我需要在字符串中替换它 服务器 A 和服务器 B 具有动态值 我不重复这种可笑的方法 哪些价值观会重复... 我如何添加 2 个新的动态值:需要替换的 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)
更新 对不起,它的 Jython,不是 python 这就像 python 2.7
【问题讨论】:
我根本无法理解您的问题(旁注:对于具有 25K 代表的人,我希望问题更清晰,语法/句子结构稍好一些;但这无关紧要)。使用 f 字符串,或者至少使用带有textwrap.dedent(..)
的多行字符串。
这能回答你的问题吗? Multiline f-string in Python
【参考方案1】:
如果是 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 3.4+ 你应该使用 f 字符串" - 请将它更正到版本 3.6+。【参考方案2】:您展示的代码使用了 python 的旧 printf
-like 替换。现在,在 python 3 中这样做的方法是使用 f-strings,它允许您直接插入变量:
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 ]] ' \
']]'
some 重复在这里是不可避免的,因为您要创建的字符串本质上是重复的。但这允许您在字符串中使用变量名称,而不是在末尾提供所有变量的列表。
str.format()
是一个适用于 python 2 变体的解决方案,它允许您使用 类似 语法并在最后提供变量名称。您仍然必须将它们全部列出(将其视为将它们从字符串的命名空间外部转移到内部),但每个只列出一次:
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
)
【讨论】:
以上是关于Jython 或 python 2.7 比传统字符串连接更好的字符串连接方法的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 Python 2.7 中手动字符串反转比切片反转更糟糕? Slice 中使用的算法是啥?