为什么你可以格式化元组而不是列表?

时间:2016-12-15 10:56:35

标签: python python-3.5

请考虑以下事项:

st = "Hi: %s, you are: %d"
x = ['user', 25]

st % x # Doesn't work
st % ("user", 25) # Works
st % (*x,) # Works

我只是觉得这是一个非常奇怪的限制

1 个答案:

答案 0 :(得分:6)

啊,但你可以“按照列表格式化”:

In [4]: '%s' % [1,2]
Out[4]: '[1, 2]'

%字符串插值器后跟single non-tuple object或元组。

如果它是一个元组,则参数将被解压缩并与字符串中的占位符匹配。如果对象是单个非元组对象,则整个对象将传递给字符串中的占位符。

这种有点狂躁的行为是Python开发人员引入语法更清晰的str.format方法的动机的一部分。

此外,来自PEP 3101

  

'%'运算符主要受限于它是a的事实   二元运算符,因此最多可以使用两个参数。   其中一个参数已经专门用于格式字符串,   将所有其他变量留在剩下的中   论点。目前的做法是使用字典或   元组作为第二个参数,但正如许多人评论的那样,   这缺乏灵活性。 “全有或全无”的方法   (意思是必须在只有位置参数之间做出选择,   或者只有命名参数)被认为过度约束。