python大括号多个字符串_关于《python基础教程》字符串章节例子的多个花括号问题...

本文通过一个Python代码示例,详细解析了在字符串格式化中大括号的多重使用,包括如何设置宽度和对齐方式。通过例子,解释了为何会出现两层大括号以及它们在格式化后的实际效果,帮助读者理解Python字符串格式化的深层含义。
摘要由CSDN通过智能技术生成

先把源码贴上:

# 根据指定宽度打印格式良好的价格列表

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('Apple', 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)

整段代码也比较简单,可是每次看第八九行时就头大,一堆{}完全看不懂,如有伙伴对本例其他地方有疑问,可以仔细读下当前章节的内容,还是很好理解的。今天研究了一上午,也没搜到太多有用的信息,于是自己写dome测试,略微知道了一点,就赶紧记下(纯属个人理解,如有雷同,不甚荣幸,如是错误,深表遗憾)。

那我们开始分析一下:

首先有两句话,我先放这里:

第一句:“我分两次设置了字符串的格式” (这是书中例子上方作者解释的时候的一句话)。

第二句:“格式定义字符串本身又包括占位符,两层花括号变成花括号,一对花括号变成宽度数值”(贴吧中某位不愿透露姓名的热心网友甲)。

然后来看两个简单的格式化:

print('{:>{}}'.format('name', 10))

# 输出为:

name

# 为了清除的显示出字符串占了10个字符,我这里设置了右对齐

这个应该容易理解,name对应占位符,而10对应宽度值。

那我们再来看一个:

print('{{:{}}}'.format(10))

输出为:

{:10}

咦~

这个结果有点怪(怪可爱的>_

我们需要借助第二句话来理解一下——“格式定义字符串本身又包括占位符”,什么意思呢?还是看个小例子:

h = '{:.3}'

print(h.format('hello'))

输出为:

hel

例子中的h就是“格式定义字符串”,h中含有占位符{},即:格式定义字符串本身又包括占位符,当字符串被格式化完毕以后,就不用再占什么位置了,自然就不需要占位符{},所以输出结果是 hel ,而不是 {hel} 。

同理,我们回到上一个例子,当 {{:{}}} 被格式化完毕输出时,最外层的占位符,自然就消失了,变成 {:{}} ,而最内层的占位符,又有宽度值10替换,所以结果就是 {:10} 。这时我们还可以在格式化一次,得到一个看起来比较正常的结果,改进一下:

tra = '{{:>{}}}'.format(10)

res = tra.format('result')

print(res)

输出为:

result

# 同样是右对齐

这时我们再来回看书中的例子就很容易理解了(我这里把item_width和price_width拆开了,只要理解一个就行了):

# 注:这里令item_width = 10

item_width = 10

header_fmt = '{{:{}}}'.format(item_width)

print(header_fmt.format('Item'))

输出:

Item

# 使用的左对齐,有些字符看不出来

所以就是这样了。

等等~

你莫不是忘了还有一句话没解释吧!

差点忘了,不过问题都解决了,怎么多处一句话来(手动尴尬),看来不牛逼就不要在开始的时候装逼>_

其实就是作者的这么一句话“我分两次设置了字符串的格式”,才导致问题复杂了那么一点点,于是,像我(本人)这种脑子不太灵光的没转过来弯,为什么这么说,还是得上代码:

# 注:这里令item_width = 10

item_width = 10

# 格式化两次

header_fmt = '{{:{}}}'.format(item_width)

print(header_fmt.format('Item'))

# 格式化一次

print('{:{}}'.format('Item', item_width))

两种情况输出结果相同:

Item

# 使用的左对齐,有些字符看不出来

看完要哭了有木有,格式化一次这么简单,也没有“一大推”的花括号,一看就能理解,作者明显跟我赵日天过不去呀!为什么不写成格式化一次?

为什么呢?自己研究喽!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值