在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,c或d恰好是不是字符串别的东西).
您可以使用\断行:
s = s.replace('a', 'x')\
.replace('b', 'y')\
.replace('c', 'z')
Run Code Online (Sandbox Code Playgroud)
或者您可以创建一个通用函数,该函数接受旧值和新值的字典,将它们全部替换为 for 循环并返回新字符串。
其他答案会让您了解如何将语句拆分为多行,但是实现您正在做的事情的一种更简单的方法是使用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)
| 归档时间: |
|
| 查看次数: |
4608 次 |
| 最近记录: |