【问题标题】:Jython or python 2.7 better string concatenation method to legacy string concatenationJython 或 python 2.7 比传统字符串连接更好的字符串连接方法
【发布时间】: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

标签: string python-2.7 jython


【解决方案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
        )

【讨论】:

    猜你喜欢
    • 2020-12-18
    • 2011-05-09
    • 2013-02-27
    • 2011-10-11
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多