• Python 基础合集2:字符串格式化


    一、前言

    本节主要讲解三种格式化:%、format()和f-string。

    环境说明:调出Python测试环境,根据下图操作,出现 >>>,就可以在后面敲相关的代码。
    image.png

    二、%

    基本语法:'%s'% variable'%s%s'% (var1,val2)
    常用符号:

    符号说明例子
    %s传递字符串、整数、浮点数等参数均可image.png
    %d或%i传递整数参数image.png
    %f或%F传递浮点数参数,默认6位小数image.png
    %e或%E传递整数或浮点参数image.png
    %g或%G自动识别小数image.png
    +显示数字的正负号,仅限数字格式化。image.png
    .n保留小数点位数,仅限数字格式化,不够0填充。image.png
    m.n.n同上,m是格式化之后的字符总长度,一般地,m>n。不够用空格补足。image.png
    m如果仅有m,没有.n,m的含义同上,表示格式化之后的字符总长度,补足补空格。
    '%2i'% 1返回' 1'
    如果是数字位数不够补0,可在格式化的数字前加0,如'%02i'% 1返回'01'
    如果要填充其他数字似乎没有办法,需要使用format()。
    image.png
    -左对齐,默认是右对齐。image.png
    %%表示一个%。其实不属于格式化,由于和格式化字符一致,顺带说明image.png

    例子代码合集:

    # %s
    >>> '%+s'% '123'
    '123'
    >>> '%+s'% 123
    '123'
    >>> '%s'% 12.3
    '12.3'
    >>> '%s'% (1+2j)
    '(1+2j)'
    
    # %d或%i
    >>> '%i'% 12
    '12'
    >>> '%i'% 12.6
    '12'
    
    # %f或%F
    >>> '%f'% 12.6
    '12.600000'
    >>> '%f'% 12
    '12.000000'
    
    # %e或%E
    >>> '%e'% 12
    '1.200000e+01'
    >>> '%e'% 12.3
    '1.230000e+01'
    
    # %g或%G
    >>> '%g'% 12
    '12'
    >>> '%g'% 12.3
    '12.3'
    
    # +
    >>> '%+i'% 12.6
    '+12'
    >>> '%+i'% -12.6
    '-12'
    >>> '%+.2f'% -12.6
    '-12.60'
    
    # .n
    >>> '%.2f'% 12
    '12.00'
    >>> '%.2f'% 12.6
    '12.60'
    >>> '%.2e'% 12
    '1.20e+01'
    
    # m.n
    >>> '%6.2f'% 12
    ' 12.00'
    
    # m
    >>> '%10i'% 12
    '        12'
    >>> '%10f'% 12
    ' 12.000000'
    >>> '%010i'% 12
    '0000000012'
    
    # -
    >>> '%-10f'% 12
    '12.000000 '
    >>> '%-10i'% 12
    '12        '
    
    # %%
    >>> '%.2f%%'% 12
    '12.00%'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    如果是多个变量格式化,则采用'%s%s'% (var1,val2),多个变量用括号括起来。
    前面字符串的格式化标识%的个数和后面变量的个数要一致,通过位置一一对应。

    >>> '%i+%.2f=%.2f'%(-1,2.1,1.1)
    '-1+2.10=1.10'
    
    • 1
    • 2

    % 还有2种很灵活的用法:

    • 1、先预留位置,后传递值;
    • 2、通过列表的键
    a = '这是一个%(adj)s玩法!'%({'adj':'有趣而灵活的'})
    print(a)
    a = '这是一个%s玩法!'
    print(a % '有趣而灵活的')
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    三、format()

    基本语法:'{}'.format()
    常用符号:部分符号和%是一样的,但是支持的功能更多。

    # 基本用法就是通过位置进行对应,如下:
    >>> '{}'.format(1)
    '1'
    >>> '{}'.format(1,2)    # 取0位
    '1'
    >>> '{}{}'.format(1,2)
    '12'
    
    # 通过索引定位
    >>> '{1}'.format(1,2)
    '2'
    >>> '{1}{0}'.format(1,2)
    '21'
    
    # 保留小数位,加上冒号 : ,后面加上的格式化方式同 % ,冒号前指定位置,默认0
    >>> '{:.2f}'.format(1,2)
    '1.00'
    >>> '{1:.2f}'.format(1,2)
    '2.00'
    
    # 显示符号
    >>> '{:+}'.format(1,2)
    '+1'
    >>> '{:+.2f}'.format(1,2)
    '+1.00'
    
    # 指定长度并对齐
    >>> '{:^4}'.format(1,2)  # 居中对齐,格式化后字符长度为4
    ' 1  '
    >>> '{:<4}'.format(1,2)  # 左对齐,格式化后字符长度为4
    '1   '
    >>> '{:>4}'.format(1,2)  # 右对齐,格式化后字符长度为4
    '   1'
    
    # 指定填充符号
    >>> '{:0^4}'.format(1,2)
    '0100'
    >>> '{:@^4}'.format(1,2)
    '@1@@'
    
    # 千分位展示
    >>> '{1:,}'.format(1,2345)
    '2,345'
    >>> '{1:_}'.format(1,2345)
    '2_345'
    
    # 最后来个汇总
    >>> '{1:*<+10.2f}'.format(1,2345)
    '+2345.00**'
    >>> '{1:*<+10,.2f}'.format(1,2345)
    '+2,345.00*'
    >>> '{1:*<+10_.2f}'.format(1,2345)
    '+2_345.00*'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    format() 也可以先预留位置,后传递值。

    a = '这是一个{}玩法!'
    print(a.format('有趣而灵活的'))
    
    • 1
    • 2

    在这里插入图片描述

    四、f-string

    该用法可以直接传入变量,不需要像format()一样传入引号后面的内容,比format()简洁一些。

    >>> a = 2345
    >>> f'{a}'
    '2345'
    >>> f'{a:*<+10,.2f}'
    '+2,345.00*'
    >>> f'{2345:*<+10,.2f}'
    '+2,345.00*'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    五、小结

    使用 % 会比较方便快捷一些,日常使用基本够用。format()功能比较强大,也相对复杂一些。f-string处于二者中间,拥有format()强大的功能,又比较简洁,但相对 % 会相对复杂一些,当然,不过作为工具,只要多用,熟悉之后都会变得相对简单。

    语法总结:
    % :'%[-][+][填充0][宽度][精度][类型]'% [参数]
    format():'{{[索引][:][填充][对齐][+][宽度][千分位符][精度][类型]}'.format([参数])
    f-string:'{{[变量][:][填充][对齐][+][宽度][千分位符][精度][类型]}'
    image.png

    >>> '%s:%-+010.2f%%'% ('百分之十二',12)
    '百分之十二:+12.00    %'
    
    >>> '{1:*<+10,.2f}'.format(1,2345)
    '+2,345.00*'
    
    >>> a = 2345
    >>> f'{a:*<+10,.2f}'
    '+2,345.00*'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    下一篇预告:字符串编码。

  • 相关阅读:
    SpringBoot定时任务 - Spring自带的定时任务是如何实现的?有何注意点?
    MySQL之索引知多少
    【Unity基础】1.项目搭建与视图编辑
    Salesforce-Apex中的数据操控(DML&数据库方法)
    [MySQL]-删库后恢复
    188基于matlab的AR模型参数估计
    Kettle运行Spoon.bat出现命令框然后闪退【BUG已解决】
    OpenCV实现手势音量控制
    Redis命令及原理学习(一)
    js 继承内置类型 之 洗牌算法
  • 原文地址:https://blog.csdn.net/qq_45476428/article/details/126841796