Python 带百分号的字符串格式
Python string formatting with percent sign
我正在尝试执行以下操作:
>>> x = (1,2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x[0], x[1], y)
'1,2,hello'
但是,我有一个很长的x
,超过两个条目,所以我尝试了:
>>> '%d,%d,%s' % (*x, y)
但这是语法错误。如果不像第一个例子那样建立索引,正确的做法是什么?
str % ..
接受 元组 作为右手操作数,因此您可以执行以下操作:
>>> x = (1, 2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x + (y,)) # Building a tuple of `(1, 2, 'hello')`
'1,2,hello'
您的尝试应该在 Python 3 中有效,其中 Additional Unpacking Generalizations
受支持,但在 Python 2.x 中无效:
>>> '%d,%d,%s' % (*x, y)
'1,2,hello'
也许看看 str.format()。
>>> x = (5,7)
>>> template = 'first: {}, second: {}'
>>> template.format(*x)
'first: 5, second: 7'
更新:
为了完整起见,我还包括 其他解包概括,由 PEP 448 描述。 Python3.5引入了扩展语法,下面不再是语法错误:
>>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {}'
>>> template.format(*x, y) # valid in Python3.5+
'first: 5, second: 7, last: 42'
在 Python 3.4 及以下版本 中,但是,如果你想在解压后的元组之后传递额外的参数,你可能最好将它们作为 命名参数:
>>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {last}'
>>> template.format(*x, last=y)
'first: 5, second: 7, last: 42'
这避免了构建一个在末尾包含一个额外元素的新元组的需要。
我建议您使用 str.format
而不是 str %
,因为它是 "more modern" 并且还具有一组更好的功能。也就是说你想要的是:
>>> x = (1,2)
>>> y = 'hello'
>>> '{},{},{}'.format(*(x + (y,)))
1,2,hello
要了解 format
的所有出色功能(以及一些与 %
相关的功能),请查看 PyFormat。
我正在尝试执行以下操作:
>>> x = (1,2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x[0], x[1], y)
'1,2,hello'
但是,我有一个很长的x
,超过两个条目,所以我尝试了:
>>> '%d,%d,%s' % (*x, y)
但这是语法错误。如果不像第一个例子那样建立索引,正确的做法是什么?
str % ..
接受 元组 作为右手操作数,因此您可以执行以下操作:
>>> x = (1, 2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x + (y,)) # Building a tuple of `(1, 2, 'hello')`
'1,2,hello'
您的尝试应该在 Python 3 中有效,其中 Additional Unpacking Generalizations
受支持,但在 Python 2.x 中无效:
>>> '%d,%d,%s' % (*x, y)
'1,2,hello'
也许看看 str.format()。
>>> x = (5,7)
>>> template = 'first: {}, second: {}'
>>> template.format(*x)
'first: 5, second: 7'
更新:
为了完整起见,我还包括 其他解包概括,由 PEP 448 描述。 Python3.5引入了扩展语法,下面不再是语法错误:
>>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {}'
>>> template.format(*x, y) # valid in Python3.5+
'first: 5, second: 7, last: 42'
在 Python 3.4 及以下版本 中,但是,如果你想在解压后的元组之后传递额外的参数,你可能最好将它们作为 命名参数:
>>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {last}'
>>> template.format(*x, last=y)
'first: 5, second: 7, last: 42'
这避免了构建一个在末尾包含一个额外元素的新元组的需要。
我建议您使用 str.format
而不是 str %
,因为它是 "more modern" 并且还具有一组更好的功能。也就是说你想要的是:
>>> x = (1,2)
>>> y = 'hello'
>>> '{},{},{}'.format(*(x + (y,)))
1,2,hello
要了解 format
的所有出色功能(以及一些与 %
相关的功能),请查看 PyFormat。