[英]Python string formatting with percent sign
I am trying to do exactly the following: 我正在努力做到以下几点:
>>> x = (1,2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x[0], x[1], y)
'1,2,hello'
However, I have a long x
, more than two items, so I tried: 但是,我有一个长
x
,超过两个项目,所以我试过:
>>> '%d,%d,%s' % (*x, y)
but it is syntax error. 但这是语法错误。 What would be the proper way of doing this without indexing like the first example?
如果不像第一个例子那样编制索引,这样做的正确方法是什么?
str % ..
accepts a tuple as a right-hand operand, so you can do the following: str % ..
接受一个元组作为右手操作数,因此您可以执行以下操作:
>>> x = (1, 2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x + (y,)) # Building a tuple of `(1, 2, 'hello')`
'1,2,hello'
Your try should work in Python 3. where Additional Unpacking Generalizations
is supported, but not in Python 2.x: 您的尝试应该在Python 3中工作。其中支持
Additional Unpacking Generalizations
,但不支持Python 2.x:
>>> '%d,%d,%s' % (*x, y)
'1,2,hello'
Perhaps have a look at str.format() . 也许看看str.format() 。
>>> x = (5,7)
>>> template = 'first: {}, second: {}'
>>> template.format(*x)
'first: 5, second: 7'
For completeness I am also including additional unpacking generalizations described by PEP 448 . 为了完整起见,我还包括PEP 448描述的其他拆包概括 。 The extended syntax was introduced in Python 3.5 , and the following is no longer a syntax error:
扩展语法是在Python 3.5中引入的,以下不再是语法错误:
>>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {}'
>>> template.format(*x, y) # valid in Python3.5+
'first: 5, second: 7, last: 42'
In Python 3.4 and below , however, if you want to pass additional arguments after the unpacked tuple, you are probably best off to pass them as named arguments : 但是,在Python 3.4及更低版本中,如果要在解压缩后的元组之后传递其他参数,最好将它们作为命名参数传递:
>>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {last}'
>>> template.format(*x, last=y)
'first: 5, second: 7, last: 42'
This avoids the need to build a new tuple containing one extra element at the end. 这避免了在最后构建包含一个额外元素的新元组的需要。
I would suggest you to use str.format
instead str %
since its is "more modern" and also has a better set of features. 我建议你使用
str.format
而不是str %
因为它“更现代”,并且还有一套更好的功能。 That said what you want is: 那说你想要的是:
>>> x = (1,2)
>>> y = 'hello'
>>> '{},{},{}'.format(*(x + (y,)))
1,2,hello
For all cool features of format
(and some related to %
as well) take a look at PyFormat . 对于
format
所有很酷的功能(以及一些与%
相关的功能),请看一下PyFormat 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.