我通常使用以下模式(如本问题所述):
a=1
s= "{a}".format(**locals())
我认为这是编写易于阅读的代码的好方法。
有时“链接”字符串格式很有用,以便“模块化”创建复杂字符串:
a="1"
b="2"
c="{a}+{b}".format(**locals())
d="{c} is a sum".format(**locals())
#d=="1+2 is a sum"
很快,代码就被X.format(**locals())
. 为了解决这个问题,我尝试创建一个 lambda:
f= lambda x: x.format(**locals())
a="1"
b="2"
c= f("{a}+{b}")
d= f("{c} is a sum")
但这会引发 KeyError,因为locals()
是 lambda 的本地变量。
我还尝试仅在最后一个字符串上应用格式:
a="1"
b="2"
c="{a}+{b}"
d="{c} is a sum".format(**locals())
#d=="{a}+{b} is a sum"
但这不起作用,因为 python 只格式化一次。现在,我可以编写一个重复格式化的函数,直到无事可做:
def my_format( string, vars ):
f= string.format(**vars)
return f if f==string else my_format(f, vars)
但我想知道:有没有更好的方法来做到这一点?