令我惊讶的是,python的百分比样式格式不接受列表,似乎只接受元组。这里的元组有什么特别之处?为什么列表会抛出错误?
In [1]: '%s %s' % ('hello', 'kilojoules')
Out[1]: 'hello kilojoules'
In [2]: '%s %s' % ['hello', 'kilojoules']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-764f27542c69> in <module>
----> 1 '%s %s' % ['hello', 'kilojoules']
TypeError: not enough arguments for format string
发布于 2019-06-24 09:00:06
你用来格式化字符串的方式是一种特殊的语法。在您显示的列表示例中,它将非元组(列表)转换为字符串,然后再尝试将其用于格式化目的。
您可以通过使用format
方法来完成您想要做的事情。
In [1]: "{} {}".format(*['hello', 'kilojoules'])
不管怎么说,我们还是推荐这样做的,as it is preferred。
发布于 2019-06-24 09:08:46
此外,在python3.6中的最新更新中,您可以像这样使用f-String:
> great = "hello"
> name = "kilojoules"
> f"{great} {name}"
'hello kilojoules'
这个website很好地总结了不同的方法。
发布于 2019-06-24 09:12:23
文档(https://python-reference.readthedocs.io/en/latest/docs/str/formatting.html)直接回答了您的问题:“如果格式说明符需要单个参数,则值可以是单个非元组对象。否则,值必须是具有格式字符串指定的项数的元组,或者是单个映射对象(例如,字典)。”列表既不是,也不是,所以它不起作用。
正如其他人所指出的,您可以使用.format
来实现更现代的方法,甚至可以使用更现代的f-string,它与原始示例一样简洁:
one_way = '{} {}'.format(*['hello', 'kilojoules'])
lst = ['hello', 'kilojoules']
another_way = f'{lst[0]} {lst[1]}'
https://stackoverflow.com/questions/56728749
复制相似问题