请考虑以下事项:
st = "Hi: %s, you are: %d"
x = ['user', 25]
st % x # Doesn't work
st % ("user", 25) # Works
st % (*x,) # Works
我只是觉得这是一个非常奇怪的限制
答案 0 :(得分:6)
啊,但你可以“按照列表格式化”:
In [4]: '%s' % [1,2]
Out[4]: '[1, 2]'
%
字符串插值器后跟single non-tuple object或元组。
如果它是一个元组,则参数将被解压缩并与字符串中的占位符匹配。如果对象是单个非元组对象,则整个对象将传递给字符串中的占位符。
这种有点狂躁的行为是Python开发人员引入语法更清晰的str.format
方法的动机的一部分。
此外,来自PEP 3101:
'%'运算符主要受限于它是a的事实 二元运算符,因此最多可以使用两个参数。 其中一个参数已经专门用于格式字符串, 将所有其他变量留在剩下的中 论点。目前的做法是使用字典或 元组作为第二个参数,但正如许多人评论的那样, 这缺乏灵活性。 “全有或全无”的方法 (意思是必须在只有位置参数之间做出选择, 或者只有命名参数)被认为过度约束。