夏橙M兮 发表于 2020-8-18 17:56

python字符串格式化问题

本帖最后由 夏橙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位的时候填充的

知心 发表于 2020-8-18 18:14

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

代码片段太少,不好分析。同为菜鸟的我给出的分析,花括号是左右两部分内容,冒号可能是海象运算符。你可以参照这个思路分析一下

额微粒波地 发表于 2020-8-18 18:18

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 编辑

委实有点多啊,看花了眼

```python
{}.2f:对应的是price
:{}:对应的是 item
```

i668899 发表于 2020-8-18 18:38

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

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

按顺序一个括号套一下就对了,可以用用现在新的格式式字符串更好用,体验也好,
a = "baidu"
b = f"{a}.com"

夏橙M兮 发表于 2020-8-19 09:05

额微粒波地 发表于 2020-8-18 18:18
def test(item_width, price_width):
    fmt = '{{:{}}}{{:>{}.2f}}'.format(i ...

没有错,我自己运行了的,这可是java基础教程上的案列。这有两个format你少写了一个。
页: [1] 2
查看完整版本: python字符串格式化问题