Python3 - 在字符串格式化程序参数中使用变量
Python3 - Use a variables inside string formatter arguments
我正在打印一些格式化的列。我想使用以下变量来设置我的 .format 参数的长度
number_length = 5
name_length = 24
viewers_length = 9
我有
print('{0:<5}{1:<24}{2:<9}'.format(' #','channel','viewers'), end = '')
理想情况下,我想要
print('{0:<number_length}{1:<name_length}{2:<viewers_length}'.format(
' #','channel','viewers'), end = '')
但这给了我一个无效的字符串格式化程序错误。
我试过在变量和括号之前使用 %,但没有成功。
您可以先构建格式字符串
f = '{0:<%d}{1:<%d}{2:<%d}' % (number_length, name_length, viewers_length)
#produces
'{0:<5}{1:<24}{2:<9}'
然后在您的其他格式调用中使用它
print(f.format(' #','channel','viewers'), end = ''))
我会这样做
In [11]: widths = dict(number=5, name=24, viewers=9)
In [12]: data = ('#', 'channel', 'viewers')
In [13]: '{:<{number}}{:<{name}}{:<{viewers}}'.format(*data, **widths)
Out[13]: '# channel viewers '
当然,也可以生成格式字符串,而无需实际格式化:
In [14]: '{{:<{number}}}{{:<{name}}}{{:<{viewers}}}'.format(**widths)
Out[14]: '{:<5}{:<24}{:<9}'
您需要:
- 名字也用大括号括起来;和
- 将宽度作为关键字参数传递给
str.format
。
例如:
>>> print("{0:>{number_length}}".format(1, number_length=8))
1
也可以使用字典解包:
>>> widths = {'number_length': 8}
>>> print("{0:>{number_length}}".format(1, **widths))
1
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
(请注意 end
和任何其他显式关键字参数必须出现在 **widths
之前。)
我正在打印一些格式化的列。我想使用以下变量来设置我的 .format 参数的长度
number_length = 5
name_length = 24
viewers_length = 9
我有
print('{0:<5}{1:<24}{2:<9}'.format(' #','channel','viewers'), end = '')
理想情况下,我想要
print('{0:<number_length}{1:<name_length}{2:<viewers_length}'.format(
' #','channel','viewers'), end = '')
但这给了我一个无效的字符串格式化程序错误。
我试过在变量和括号之前使用 %,但没有成功。
您可以先构建格式字符串
f = '{0:<%d}{1:<%d}{2:<%d}' % (number_length, name_length, viewers_length)
#produces
'{0:<5}{1:<24}{2:<9}'
然后在您的其他格式调用中使用它
print(f.format(' #','channel','viewers'), end = ''))
我会这样做
In [11]: widths = dict(number=5, name=24, viewers=9)
In [12]: data = ('#', 'channel', 'viewers')
In [13]: '{:<{number}}{:<{name}}{:<{viewers}}'.format(*data, **widths)
Out[13]: '# channel viewers '
当然,也可以生成格式字符串,而无需实际格式化:
In [14]: '{{:<{number}}}{{:<{name}}}{{:<{viewers}}}'.format(**widths)
Out[14]: '{:<5}{:<24}{:<9}'
您需要:
- 名字也用大括号括起来;和
- 将宽度作为关键字参数传递给
str.format
。
例如:
>>> print("{0:>{number_length}}".format(1, number_length=8))
1
也可以使用字典解包:
>>> widths = {'number_length': 8}
>>> print("{0:>{number_length}}".format(1, **widths))
1
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
(请注意 end
和任何其他显式关键字参数必须出现在 **widths
之前。)