星号 `*` 在 Python 3 中的字符串格式化方法 `.format(*) ` 中如何工作?

How does an asterisk `*` work in the string formatting method `.format(*) ` in Python 3?

*.format(*)中有什么用? 在 print(new_string.format(*sum_string)) 下面的格式函数中使用它时,它会将输出中 sum_string 的值从 18 更改为 1 为什么会这样? 我已经阅读了以下关于 *args**kwargs 的 link 但无法理解它如何应用于 .format() 函数

What does ** (double star/asterisk) and * (star/asterisk) do for parameters?

sum_string = "18"
new_string = "This is a new string of value {}"

print(new_string.format(sum_string)) #it provides an output of value 18
print(new_string.format(*sum_string)) #it provides an output of value 1

format无关。 * 解压参数,如果列表中有 4 个占位符和 4 个元素,则 format 解压参数并填充插槽。示例:

args = range(4)
print(("{}_"*4).format(*args))

打印:

0_1_2_3_

第二种情况:

print(new_string.format(*sum_string))

要解包的参数是字符串的字符(字符串被参数解包视为可迭代),并且由于只有一个占位符,所以只有第一个字符已格式化并打印(与 C 编译器可能会收到的警告相反,printf、python 不会警告您参数列表太长,它只是不使用所有他们)

使用多个占位符,您会看到这一点:

>>> args = "abcd"
>>> print("{}_{}_{}_{}").format(*args))
a_b_c_d