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 中使用的算法是啥?

Py4J 的开销比 Jython 和 JPype 大

基于jython操作hbase

jython安装

在 Python 2.7 中检查字符串“None”或“not”

Python 2.7 pyodbc 或 pymssql 与 R RODBC