【问题标题】:How to use unpacking operator ("*") together with C-style string formatting?如何将解包运算符(“*”)与 C 风格的字符串格式一起使用?
【发布时间】:2021-10-06 10:20:00
【问题描述】:

我最近开始了成为一名程序员的漫长而艰巨(但很充实)的旅程,目前我正在努力在最新版本的 Python 中获得字符串格式化的基础知识。

在查看字符串格式化的 3 种主要方法时,我无法将解包运算符 (*) 的使用与使用 % 字符串格式化运算符的字符串格式化结合起来。

我在使用字符串点格式时没有这个问题:

>>> L = ["Bob", "Frank", "Joe"] 
>>> names = "Looking for {}, {}, {}"
>>> print(names.format(*L))
Looking for Bob, Frank, Joe

但是,使用 % 字符串格式,我收到错误消息:

>>> Names = "Looking for %s, %s, %s"%*L
SyntaxError: invalid syntax
>>> Names = "Looking for %s, %s, %s"%(*L)
SyntaxError: can't use starred expression here

有没有什么办法可以将解包操作符与%字符串格式结合起来,还是只能在字符串点格式的上下文中使用?

塞巴斯蒂安

【问题讨论】:

  • 我会亲自做print(f"Looking for {', '.join(L)}")!输入更少,无论L 中有多少个名字,它都能正常工作。

标签: python string formatting


【解决方案1】:

% 接受一个元组,所以你可以写

names = "Looking for %s, %s, %s" % tuple(L)

如果 format 需要单个参数,则 values 可能是单个非元组对象。否则,values 必须是与格式字符串指定的项目数完全相同的元组,或者是单个映射对象(例如,字典)。

——https://docs.python.org/3/library/stdtypes.html#old-string-formatting

如果你还想使用解包*,你可以这样做

names = "Looking for %s, %s, %s" % (*L,)

虽然在这种情况下这只是写tuple(L) 的一种复杂方式;见PEP 448。注意,不能省略。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多