【发布时间】:2010-02-04 17:43:16
【问题描述】:
我经常发现自己使用以下模式进行字符串格式化。
a = 3
b = 'foo'
c = dict(mykey='myval')
#prints a is 3, b is foo, mykey is myval
print('a is {a}, b is {b}, mykey is {c[mykey]}'.format(**vars()))
也就是说,我经常在本地命名空间中有需要打印的值,通过调用 vars() 来表示。然而,当我查看我的代码时,不断重复.format(**vars()) 模式似乎非常不合Python。
我想创建一个函数来捕捉这种模式。如下所示。
# doesn't work
def lfmt(s):
"""
lfmt (local format) will format the string using variables
in the caller's local namespace.
"""
return s.format(**vars())
除了当我在 lfmt 命名空间中时,vars() 不再是我想要的。
我如何编写 lfmt 以便它在调用者的命名空间中执行 vars() 以便下面的代码可以像上面的示例一样工作?
print(lfmt('a is {a}, b is {b}, mykey is {c[mykey]}'))
【问题讨论】:
-
您的请求似乎违背了“显式胜于隐式”的 Python 精神。我不再完全拥有我曾经做过的 Python 印章,但我想不出任何方法来完成你想要的。
标签: python scope string-formatting