在JavaScript中我可以做类似的事情:
var template = "{a}{b}-{c}{d}";
var myStuff = template
.replace("{a}", a)
.replace("{b}", b)
.replace("{c}", c)
.replace("{d}", d);
我想在python中做类似的事情,但由于python使用缩进代码块,我不能简单地写:
myStuff = template
.replace("{a}", a)
.replace("{b}", b)
.replace("{c}", c)
.replace("{d}", d)
我不想写这个:
myStuff = template.replace("{a}", a).replace("{b}", b).replace("{c}", c).replace("{d}", d)
或者这个:
myStuff = template
myStuff = myStuff.replace("{a}", a)
myStuff = myStuff.replace("{b}", b)
myStuff = myStuff.replace("{c}", c)
myStuff = myStuff.replace("{d}", d)
他们看起来都很丑陋(我不喜欢我的代码丑陋!) 有没有办法在python中将方法调用链分解为新行?就像我在JavaScript中一样?
答案 0 :(得分:8)
一般来说,你唯一的希望是使用线加入。您始终可以使用显式行连接
myStuff = template \
.replace("{a}", a) \
.replace("{b}", b) \
.replace("{c}", c) \
.replace("{d}", d)
要使用隐式线连接,您必须在某处放置括号(隐式线连接是指在paretheses,括号或括号内有某些内容 - 如果分成几行,则标识不会生效)。例如
myStuff = (template.replace("{a}", a)
.replace("{b}", b)
.replace("{c}", c)
.replace("{d}", d))
当然,您可以找到针对特定情况的特殊解决方案,例如在您的示例中使用字符串格式:
myStuff = template.format(a=a, b=b, c=c, d=d)
但是,如果您尝试完全替换其他内容(如果发生a
,b
,c
或d
,也不会失败是一个别的东西而不是一个字符串)。
答案 1 :(得分:4)
您可以使用\
打破一行:
s = s.replace('a', 'x')\
.replace('b', 'y')\
.replace('c', 'z')
或者您可以创建一个接受旧值和新值字典的泛型函数,用for循环替换它们并返回新字符串。
答案 2 :(得分:4)
其他答案可以帮助您了解如何将语句拆分为多行,但实现您正在做的事情的更简单方法是使用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'
第一个str.format()
将字典解包为函数format()
的关键字参数(类似于第二个函数直接执行的操作)。
此外,您可以将参数拆分为多行中的函数调用,而无需使用\
,例如 -
>>> template.format(a=a,
... b=b,
... c=c,
... d=d)
'12-34'