python中format括号使用中的小疑惑

a=35
h='{{:{}}}'.format(a)
h.format('item')
为什么要扩这么多括号,明明数了多一个括号去掉就报错
IndexError: tuple index out of range
也想在里面加item
h='{item:{}}'.format(a)
结果
KeyError: 'item'
求原因

img


h='{{:{}}}'.format(a) # 花括号成对的,一共三对,冒号前两个,后边1个左花括号


h='{{item:{}}}'.format(a)

# 外边需要再套一层花括号,如果只有两对花括号,会先转成 dict 再转回来

因为在format格式化字符串中 {} 是特殊字符
如'{}'.format(35) 会把字符串中{}替换成35。
这样如果想要在字符串中要出现一对{和}字符 就必须写成{{ 和 }}。
这与 \ 转义符是一个道理,在字符串中要出现一个\就必须写两个\

如 '{{a{}b}}'.format(35) 前面的{{变成一个{字符 中间的{}替换成35。 后面的}}变成一个}字符
结果就是{a35b}

img


所以这样也是当字典dict处理了
再加一层花括号format才会格式化可以这么理解吗?