在Python中使用format()函数中的变量

Ali*_*afa 2 python formatting python-3.x

是否可以在格式()中使用格式说明符中的变量 - Python中的函数?我有以下代码,我需要VAR等于field_size:

def pretty_printer(*numbers):
  str_list = [str(num).lstrip('0') for num in numbers]

  field_size = max([len(string) for string in str_list])

  i = 1
  for num in numbers:
    print("Number", i, ":", format(num, 'VAR.2f')) # VAR needs to equal field_size
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 8

您可以使用该str.format()方法,该方法允许您为宽度等内容插入其他变量:

'Number {i}: {num:{field_size}.2f}'.format(i=i, num=num, field_size=field_size)
Run Code Online (Sandbox Code Playgroud)

每个{}都是占位符,从关键字参数填充命名值(您也可以使用带编号的位置参数).可选后面的部分:给出了格式(format()函数的第二个参数,基本上),你可以{}在那里使用更多的占位符来填充参数.

使用编号的位置看起来像这样:

'Number {0}: {1:{2}.2f}'.format(i, num, field_size)
Run Code Online (Sandbox Code Playgroud)

但你也可以将两者混合或选择不同的名字:

'Number {0}: {1:{width}.2f}'.format(i, num, width=field_size)
Run Code Online (Sandbox Code Playgroud)

如果省略数字和名称,则字段会自动编号,因此以下内容等同于上述格式:

'Number {}: {:{width}.2f}'.format(i, num, width=field_size)
Run Code Online (Sandbox Code Playgroud)

请注意,整个字符串是一个模板,因此Number字符串和冒号之类的东西是模板的一部分.

但是,您需要考虑字段大小包括小数点; 您可能需要调整大小以添加这3个额外字符.

演示:

>>> i = 3
>>> num = 25
>>> field_size = 7
>>> 'Number {i}: {num:{field_size}.2f}'.format(i=i, num=num, field_size=field_size)
'Number 3:   25.00'
Run Code Online (Sandbox Code Playgroud)

  • @JoonhoPark是的,Python可以做到这一点,只要你使用嵌套的替换部分:`print(f'variance = {variance:{fmt}}')`。演示:https://repl.it/repls/CommonBlaringLegacysystem#main.py (2认同)

Eug*_*nok 7

我更喜欢这个(新的3.6)风格:

name = 'Eugene'
f'Hello, {name}!'
Run Code Online (Sandbox Code Playgroud)

或多行字符串:

f'''
Hello,
{name}!!!
{a_number_to_format:.1f}
'''
Run Code Online (Sandbox Code Playgroud)

这真的很方便。

我发现旧式格式有时很难阅读。甚至串联也可以更具可读性。看一个例子:

'{} {} {} {} which one is which??? {} {} {}'.format('1', '2', '3', '4', '5', '6', '7')
Run Code Online (Sandbox Code Playgroud)