繁体   English   中英

为什么python字符串格式需要一个元组? 为什么列表不起作用?

[英]why does python string formatting need a tuple? Why doesn't a list work?

我很惊讶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

格式化字符串的方式是一种特殊的语法。 在显示的列表示例中,它将非元组(列表)转换为字符串,然后尝试将其用于格式化目的。

您可以使用format方法来完成您想做的事情。

In [1]: "{} {}".format(*['hello', 'kilojoules'])

无论如何,建议这样做, 因为它是首选

另外,借助python3.6中的最新更新,您可以使用如下所示的f-String:

> great = "hello"
> name = "kilojoules"

> f"{great} {name}"
'hello kilojoules'

网站很好地总结了不同的方法。

该文档( https://python-reference.readthedocs.io/en/latest/docs/str/formatting.html )直接回答了您的问题:“如果格式说明符需要单个参数,则值可能是单个非元组对象否则,值必须是一个元组,且其元组必须具有由格式字符串指定的项目数,或者是单个映射对象(例如,字典)。” 列表都不是,因此不会。

就像其他人指出的那样,您可以只使用.format来实现更现代的方法,甚至使用更现代的f字符串,就像您的原始示例一样简洁:

one_way = '{} {}'.format(*['hello', 'kilojoules'])
lst = ['hello', 'kilojoules']
another_way = f'{lst[0]} {lst[1]}'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM