Python3 - 在字符串格式化程序参数中使用变量

Spe*_*ood 2 python printing string format

我有一些格式化的列,我正在打印.我想使用以下变量来设置.format参数的长度

number_length = 5
name_length = 24
viewers_length = 9
Run Code Online (Sandbox Code Playgroud)

我有

print('{0:<5}{1:<24}{2:<9}'.format(' #','channel','viewers'), end = '')
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要像

print('{0:<number_length}{1:<name_length}{2:<viewers_length}'.format(
     ' #','channel','viewers'), end = '')
Run Code Online (Sandbox Code Playgroud)

但这给了我一个无效的字符串格式化程序错误.

我在变量和括号之前尝试了%,但没有运气.

jon*_*rpe 7

你需要:

  1. 用括号括起名字; 和
  2. 将宽度作为关键字参数传递给str.format.

例如:

>>> print("{0:>{number_length}}".format(1, number_length=8))
       1
Run Code Online (Sandbox Code Playgroud)

您还可以使用字典解包:

>>> widths = {'number_length': 8}
>>> print("{0:>{number_length}}".format(1, **widths))
       1
Run Code Online (Sandbox Code Playgroud)

str.format不会在当地范围内查找适当的名称; 它们必须被明确地传递.

对于您的示例,这可以像:

>>> widths = {'number_length': 5,
              'name_length': 24,
              'viewers_length': 9}
>>> template= '{0:<{number_length}}{1:<{name_length}}{2:<{viewers_length}}'
>>> print(template.format('#', 'channel', 'visitors', end='', **widths))
#    channel                 visitors
Run Code Online (Sandbox Code Playgroud)

(注意end,以及任何其他显式关键字参数必须在之前**widths.)