Python:将方法分割调用为多行

Dan*_*zyk 6 python

在JavaScript中我可以做类似的事情:

var template = "{a}{b}-{c}{d}";
var myStuff = template
                .replace("{a}", a)
                .replace("{b}", b)
                .replace("{c}", c)
                .replace("{d}", d);
Run Code Online (Sandbox Code Playgroud)

我想在python中做类似的事情,但由于python使用缩进代码块,我不能简单地写:

myStuff = template
                .replace("{a}", a)
                .replace("{b}", b)
                .replace("{c}", c)
                .replace("{d}", d)
Run Code Online (Sandbox Code Playgroud)

我不想写这个:

myStuff = template.replace("{a}", a).replace("{b}", b).replace("{c}", c).replace("{d}", d)
Run Code Online (Sandbox Code Playgroud)

或这个:

myStuff = template
myStuff = myStuff.replace("{a}", a)
myStuff = myStuff.replace("{b}", b)
myStuff = myStuff.replace("{c}", c)
myStuff = myStuff.replace("{d}", d)
Run Code Online (Sandbox Code Playgroud)

它们看起来都很丑陋(我不喜欢我的代码丑陋!).
有没有办法在python中将方法调用链分解为新行,就像我在JavaScript中一样?

sky*_*ing 10

一般来说,你唯一的希望是使用线连接.您始终可以使用显式行连接

myStuff = template \
            .replace("{a}", a) \
            .replace("{b}", b) \
            .replace("{c}", c) \
            .replace("{d}", d)
Run Code Online (Sandbox Code Playgroud)

要使用隐式线连接,您必须在某处放置括号(隐式线连接是指在paretheses,括号或大括号内有内容时 - 如果分成几行,则标识不会生效).例如

 myStuff = (template.replace("{a}", a)
            .replace("{b}", b)
            .replace("{c}", c)
            .replace("{d}", d))
Run Code Online (Sandbox Code Playgroud)

当然,您可以找到针对特定情况的特殊解决方案,例如在示例中使用字符串格式:

 myStuff = template.format(a=a, b=b, c=c, d=d)
Run Code Online (Sandbox Code Playgroud)

但是这是行不通的,如果你想更换一些完全别的(它也不会失败,如果a,b,cd恰好是不是字符串别的东西).


Dee*_*ace 5

您可以使用\断行:

s = s.replace('a', 'x')\
      .replace('b', 'y')\
      .replace('c', 'z')
Run Code Online (Sandbox Code Playgroud)

或者您可以创建一个通用函数,该函数接受旧值和新值的字典,将它们全部替换为 for 循环并返回新字符串。


Ana*_*mar 5

其他答案会让您了解如何将语句拆分为多行,但是实现您正在做的事情的一种更简单的方法是使用str.format()-

>>> template = "{a}{b}-{c}{d}"
>>> a = 1
>>> b = 2
>>> c = 3
>>> d = 4
>>> template.format(**{'a':a,'b':b,'c':c,'d':d})
'12-34'
>>> template.format(a=a,b=b,c=c,d=d)
'12-34'
Run Code Online (Sandbox Code Playgroud)

第一个str.format()将字典解包为函数的关键字参数format()(类似于第二个直接执行的操作)。


此外,您可以将参数拆分为多行函数调用,而无需使用\,例如 -

>>> template.format(a=a,
...                 b=b,
...                 c=c,
...                 d=d)
'12-34'
Run Code Online (Sandbox Code Playgroud)