Python字符串格式:多次引用一个参数

Nic*_*ner 42 python string-formatting

如果我有一个像这样的字符串:

"{0} {1} {1}" % ("foo", "bar")
Run Code Online (Sandbox Code Playgroud)

而且我要:

"foo bar bar"
Run Code Online (Sandbox Code Playgroud)

替换令牌必须是什么?(我知道上面的例子不正确;我只是想表达我的目标.)

mou*_*uad 57

"{0} {1} {1}".format("foo", "bar")
Run Code Online (Sandbox Code Playgroud)

  • @Rosarch:因为`{n}`语法只适用于`str.format()`,而不适用于`str .__ mod __()`. (2认同)

Ser*_*gic 15

"%(foo)s %(foo)s %(bar)s" % { "foo" : "foo", "bar":"bar"}
Run Code Online (Sandbox Code Playgroud)

是另一个真实但很长的答案.只是为了向您展示关于该问题的另一种观点;)


Joh*_*ica 8

Python 3具有完全相同的语法,除了%运算符现在是format方法.str.format也已添加到Python 2.6+以平滑过渡到Python 3.有关更多详细信息,请参阅格式字符串语法.

>>> '{0} {1} {1}' % ('foo', 'bar')
'foo bar bar'
Run Code Online (Sandbox Code Playgroud)

但是,在旧版本的Python中,无法使用元组来完成它.您可以使用括在括号中的映射键来结束.使用映射键时,格式值必须作为dict而不是元组传入.

>>> '%(0)s %(1)s %(1)s' % {'0': 'foo', '1': 'bar'}
'foo bar bar'
Run Code Online (Sandbox Code Playgroud)

Python手册:

当右参数是字典(或其他映射类型)时,字符串中的格式必须包含括号内的映射键,该字符串紧跟在'%'字符后面插入的字典中.映射关键字从映射中选择要格式化的值.