我经常发现自己使用以下模式进行字符串格式化。在
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())
模式似乎非常不和谐。在
我想创建一个函数来捕捉这个模式。应该是如下所示。在
^{pr2}$除了当我在lfmt
名称空间时,vars()已经不是我想要的了。在
如何编写lfmt以便它在调用方的名称空间中执行vars(),以便下面的代码可以像上面的示例一样工作?在
print(lfmt('a is {a}, b is {b}, mykey is {c[mykey]}'))
你必须检查调用帧中的变量。在
这将帮助您开始:
编辑:为了使
lfmt
在从不同名称空间调用时工作,您需要inspect
模块。注意,作为the documentation warns,inspect
模块可能不适合生产代码,因为它可能无法与Python的所有实现一起工作给你:
它起作用并不意味着你应该使用它。这就是开发人员所说的“主要黑客”,通常附带一条评论“XXX fix me XXX”。在
相关问题 更多 >
编程相关推荐