string.format(...,**locals()) 的缩写形式

2024-03-11

我通常使用以下模式(如这个问题 https://stackoverflow.com/questions/11764900/using-locals-and-format-method-for-strings-are-there-any-caveats):

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 只格式化一次。 现在我could编写一个重复格式化的函数,直到没有更多事情可做:

def my_format( string, vars ):
    f= string.format(**vars)
    return f if f==string else my_format(f, vars)

但我想知道:有更好的方法吗?


f = lambda x, l=locals(): x.format(**l)似乎有效...

如果您想要一个更全面的版本(并且可能要慢得多):

fg = lambda x, l=locals(), g=globals(): x.format(**dict(g.items() + l.items()))

将在局部变量或全局变量中找到符号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

string.format(...,**locals()) 的缩写形式 的相关文章

随机推荐