当前命名空间的Python字符串格式

时间:2012-06-02 16:02:03

标签: python

我发现自己写了很多这样的东西:

s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(v1="foo", v2=v2, v3=v3, v4=v4, v5=v5)

是否可以让Python的string.format使用当前命名空间中的变量?上面的调用可以简化为:

s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(v1="foo")

2 个答案:

答案 0 :(得分:13)

您是否在想这样的事情?

>>> v1 = "foo"
>>> v2,v3,v4,v5 = 1,2,3,4
>>> s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(v1="foo", v2=v2, v3=v3, v4=v4, v5=v5)
>>> s
'foo_1_2_3_4'
>>> s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(**locals())
>>> s
'foo_1_2_3_4'

但是,为了记录,我会避免这样做。如果变量是相同类型的东西,那么它们应该在一些结构中在一起,从中可以在不使用locals()的情况下获得值。即使它们不是,我想我更愿意手动将它们组合成一个单独的字典,然后在以这种方式使用locals()之前使用它。

[ Ed:你真是个伪君子。您始终以这种方式使用string.Templatelocals()来生成用于模拟的参数文件套件。不要假装你没有。

我:是的,但我不想鼓励其他人养成我的坏习惯。

Ed:至少你应该承认你觉得它很有用,如果你假装是一个比你更明确的编码器。

我:...]

答案 1 :(得分:0)

new feature in Python 3.6直接提供此功能:

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'