吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1134|回复: 12
收起左侧

[已解决] python字符串格式化问题

[复制链接]
夏橙M兮 发表于 2020-8-18 17:56
本帖最后由 夏橙M兮 于 2020-8-19 12:15 编辑

fmt = '{{:{}}}{{:>{}.2f}}'.format(item_width, price_width)
print(fmt.format('Apples', 0.4))  
这个花括号有点多,把我看晕了。怎么好理解呀?这Python怎么解析呢?
我自己改了一下,输出感觉不对呀。怎么回事?
myfmt = '{:{}}{:>{}.2f}'.format(item_width, price_width)  我输出编译错误,怎么回事呢?
来个大神帮我理解一下。感谢。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Junpre 发表于 2020-8-19 09:45
大括号在format函数中是占位,如果原本字符串就是 `{}` 那么你需要转义,在format函数中,转义是用一对大括号将需要转义的部分包起来,即 `{{}}`

所以 `'{{:{}}}{{:>{}.2f}}'` 中,只有两个位置起占位作用,其他大括号就是普通字符,第一次format格式化后变为 `{:7}{:>6.2f}` (假如`item_width = 7 price_width = 6`)

然后第二次format的时候,这时表达式变成了 `{:7}{:>6.2f}`,`:7`意思字符总长度为7,在右边填充(没有指定填充字符,默认空格);`:>6.2f`意思是小数点保留2位,字符串总长度为6,左边补齐(没有指定填充字符,默认空格),`print(fmt.format('Apples', 0.4))` 的结果就是 `Apples   0.40` 中间三个空格,第一个是`{:7}`对`Apples`位数补齐到7位填充上的,后两个空格是`{:>6.2f}`对`0.4`小数点扩充到两位后的位数补齐到6位的时候填充的

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
夏橙M兮 + 1 + 1 谢谢@Thanks!

查看全部评分

知心 发表于 2020-8-18 18:14
本帖最后由 知心 于 2020-8-18 18:18 编辑

代码片段太少,不好分析。同为菜鸟的我给出的分析,花括号是左右两部分内容,冒号可能是海象运算符。你可以参照这个思路分析一下
额微粒波地 发表于 2020-8-18 18:18
[Python] 纯文本查看 复制代码
def test(item_width, price_width):
    fmt = '{{:{}}}{{:>{}.2f}}'.format(item_width, price_width)
    print(fmt)
    
test('Apples', 0.4)


你这代码本就写错了
auqhjjqdo 发表于 2020-8-18 18:19
把字符串里的{}替换成format里的参数,{{在字符串里转义成{,}}同理转义成},编译错误那是你没定义format参数的值吧
kiopc 发表于 2020-8-18 18:20
本帖最后由 kiopc 于 2020-8-18 18:25 编辑

委实有点多啊,看花了眼

{}.2f:对应的是price
:{}:对应的是 item
i668899 发表于 2020-8-18 18:38
[Python] 纯文本查看 复制代码
list_width = 50
price_width = 10

item_width = list_width - price_width

fmt = '{{:{}}}{{:>{}.2f}}'.format(item_width, price_width)
# 该语句执行后为 fmt = {:40}{:>10.2f},当 {{:{}}} 被格式化完毕输出时,最外层的占位符,自然就消失了,变成 {:{}} ,而最内层的占位符,又有宽度值item_width替换,所以结果就是 {:40}。同理{{:>{}.2f}}会被格式化为{:>10.2f}。
# 左侧左对齐,右侧数字右对齐

print(fmt.format('Apples', 0.4))  # 输出为:Apples                                        0.40


ixsec 发表于 2020-8-18 20:55
[Python] 纯文本查看 复制代码
item_width = "APples"
price_width = 0.4
fmt = '{{:{}}}{{:>{}.2f}}'.format(item_width, price_width)
print(fmt)

{:APples}{:>0.4.2f}
jxhuhuai 发表于 2020-8-18 21:23
不清楚 小白一个
wanwfy 发表于 2020-8-18 21:34
按顺序一个括号套一下就对了,可以用用现在新的格式式字符串更好用,体验也好,
[Python] 纯文本查看 复制代码
a = "baidu"
b = f"{a}.com"
 楼主| 夏橙M兮 发表于 2020-8-19 09:05
额微粒波地 发表于 2020-8-18 18:18
[mw_shl_code=python,true]def test(item_width, price_width):
    fmt = '{{:{}}}{{:>{}.2f}}'.format(i ...

没有错,我自己运行了的,这可是java基础教程上的案列。这有两个format你少写了一个。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 13:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表