1

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

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

是否可以让 Pythonstring.format使用当前命名空间中的变量?然后可以将上述调用简化为:

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

2 回答 2

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:至少你应该承认你发现它很有用,如果你要假装是比你更明确的编码器。

我: ...]

于 2012-06-02T16:04:10.600 回答
0

Python 3.6中有一个新特性直接赋予了这种能力:

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'
于 2017-08-31T18:14:05.267 回答