You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字符串格式化中连续大括号的作用及参数插入位置问询

Python格式化字符串问题解答

示例代码

width = int(input('Please enter width:'))
price_width = 10
item_width = width - price_width
header_fmt = "{{:{}}}{{:>{}}}".format(item_width, price_width)
fmt = "{{:{}}}{{:{}.2f}}".format(item_width, price_width)

print('=' * width)
print(header_fmt.format('Item', 'Price'))
print('-' * width)
print(fmt.format('Apples', 0.4))
print(fmt.format('Pears', 0.5))
print(fmt.format('Cantaloupes', 1.92))
print(fmt.format('Dried Apricots(16 oz.)', 8))
print(fmt.format('Prunes(4 lbs.)', 12))
print('=' * width)

问题与解答

1. 语句'{{:{}}}{{:>{}}}'.format(item_width, price_width)中的大括号分别表示什么含义?

在Python字符串格式化规则里,连续的两对大括号{{}}会被转义成单个大括号{},用来作为后续二次格式化的占位符。拆分解析:

  • {{:{}}}:外层{{}}最终转为{:},内层的{}是当前format方法的第一个占位符,用来填充item_width;
  • {{:>{}}}:外层{{}}最终转为{:>},内层的{}是当前format方法的第二个占位符,用来填充price_width。
    执行完这次format后,整个字符串会变成类似{:X}{:>Y}的格式模板(X是item_width的数值,Y是price_width的数值),供后续表头格式化使用。

2. item_width和price_width最终被插入到什么位置?

  • item_width会填入第一个内层{}的位置,也就是{{:{}}}里的那个单大括号;
  • price_width会填入第二个内层{}的位置,也就是{{:>{}}}里的那个单大括号。
    举个实际例子:如果输入的总宽度width是30,那么item_width=20、price_width=10,执行第一次格式化后,header_fmt会变成{:20}{:>10}。

3. 在print(header_fmt.format('Item', 'Price'))中,已插入item_width和price_width后,Item和Price会被插入到哪里?

此时header_fmt已经是{:20}{:>10}这类格式模板:

  • Item会被插入到第一个占位符{:20}的位置,按照左对齐规则填充20个字符宽度;
  • Price会被插入到第二个占位符{:>10}的位置,按照右对齐规则填充10个字符宽度。
    最终表头会呈现出Item左占20位、Price右占10位的规整格式。

关于删除大括号触发TypeError的说明

如果随意删除一对大括号,比如改成'{:{}}{{:>{}}}'.format(item_width, price_width),会导致字符串中的占位符数量和format传入的参数数量不匹配,从而触发TypeError。原语句里的{{}}是转义专用的,必须成对出现才能生成后续二次格式化需要的单个占位符大括号,少一对就会破坏占位符与参数的对应关系。


内容的提问来源于stack exchange,提问作者jtindex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:30:12