网站LOGO
博客 | 棋の小站
页面加载中
12月6日
达尔达尼亚瀑布,博洛尼亚,意大利 ...
网站LOGO 博客 | 棋の小站
记录学习,心得,状态,生活。
菜单
  • 博客 | 棋の小站
    记录学习,心得,状态,生活。
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    Python格式化字符串有何窍门
    点击复制本页地址
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。
    按住ctrl可打开默认菜单

    Python格式化字符串有何窍门

    · 原创 ·
    学学编程 · Python
    共 3466 字 · 约 3 分钟 · 250

    不知道有多少学校计算机科学与技术大一的时候就教C语言,接触到的第一个函数就是printf()函数,它接收至少一个参数:要格式化的字符串,里面包含一系列占位符,如%d表示整数、%e表示科学计数法,然后后面再使用变量替换这些占位符。Python格式化字符串总共有以下几种方式,一起来看看吧。

    使用“%”运算符

    Python的字符串对运算符“%”进行了重载,它用于将字符串中由百分号和一个字母组成的占位符替换成具体的值,这个百分号占位符和C语言很类似,如%d代表十进制整数、%e代表科学计数法、%s代表字符串、%x代表十六进制数。

    python 代码:
    num = 12
    print('%s %d %x %o %e %f' % (num, num, num, num, num, num))
    # 12 12 c 14 1.200000e+01 12.000000

    使用format()方法

    以下内容来自我的云笔记。

    模板的格式为{[index][:[fill]align][sign][#][width][.precision][type]}

    index,可选参数,指定要设置格式的对象在参数列表的索引位置,索引值如果省略,则使用默认排序。

    fill,可选参数,指定空白处填充的字符。

    align,可选参数,指定对齐参数,<左对齐,>右对齐,^居中对齐,=只对数字有效,右对齐,正数前无符号。

    sign,可选参数,指定数字格式化格式,可选为,-,+,若为空格则表示正数加空格,负数加负号。

    \#,可选参数,在二进制,八进制,十六进制数前分别显示\0b,\0o,\0x。

    width,可选参数,指定所占宽度。

    .precision,可选参数,指定保留的小数位数。

    type,可选参数,指定类型,和C语言非常类似,若为G或g,则自动在e和f转换。

    python 代码:
    num = 12
    string = 'abc'
    print('{:.2f}, {}'.format(num, string))
    # 12.00 abc

    Python3.6新出的f-string

    f-string就是在字符串前面加一个“f”,在字符串内部使用大括号包围变量的方式来格式化字符串,如上方f'{num}就相当于'%d'%num'{:d}.format(num)。我最喜欢用这种方式格式化字符串,因为它直接将变量名称作为占位符,不需要使用上方的两种方法而来回对比占位符和变量名称,使代码更简洁。

    python 代码:
    name = "Alice"
    age = 25
    formatted_string = f"My name is {name} and I am {age} years old."
    print(formatted_string)

    f-string也支持一些预处理操作,如'%.2f'%num表示将数字小数点后保留两位,对应的f-string为f'{num:2f}。Python中常用的f-string字符串预处理如下。

    • 格式化数字。
    python 代码:
    num = 3.14159
    formatted_num = f"{num:.2f}"
    print(formatted_num)
    # 3.14
    • 对其和填充。“>”表示右对齐,“^”表示居中对齐,“<”表示左对齐,后面的数字表示文字宽度,字符表示填充字符,格式为:<填充字符><宽度>
    python 代码:
    name = "Alice"
    print(f"|{name:<10}|")  # 左对齐: |Alice     |
    print(f"|{name:>10}|")  # 右对齐: |     Alice|
    print(f"|{name:^10}|")  # 居中对齐: |  Alice   |
    print(f"|{name:*^10}|")  # 填充: |**Alice***|

    运行结果如下。

    运行结果运行结果
    • 格式化日期和时间。当对datetime对象进行格式化时可以在冒号后面跟上要格式化的时间。
    python 代码:
    import datetime
    
    now = datetime.datetime.now()
    print(f'现在是{now:%Y年%m月%d日%H时%M分%S秒}')
    # 现在是2023年07月21日17时40分29秒
    • 当数字位数过多时,指定使用何字符隔开数字。
    python 代码:
    number = 42000
    formatted_number = f"{number:,}"  # 使用千位分隔符: 42,000
    print(formatted_number)
    # 42,000
    • 将数字转换为对应的进制。b为二进制数,o为八进制数,e为指数,x为十六进制数。
    python 代码:
    num = 22
    print(f'{num:d} {num:b} {num:o} {num:e} {num:x}')
    # 22 10110 26 2.200000e+01 16
    num = 1.234
    print(f'{num:.2f}')
    # 1.23

    自定义格式化预处理。

    通过重写`__format__(self, format_spec)即可自定义格式化字符串时做何种处理。其中format_spec代表格式化处理选择,如前面提到的%.2f中的.2f代表保留小数点后两位、format方法中{}占位符内冒号后面的.2f以及f-string中冒号后方的.2f都是format_spec参数。

    python 代码:
    class Text:
        def __init__(self, text: str):
            self.text = text
    
        def __format__(self, format_spec):
            if format_spec == 'upper':
                return self.text.upper()
            return self.text.__format__(format_spec)
    
    abc = Text('abc')
    print(f'{abc:upper}')
    # ABC
    声明:本文由 (博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    发一条! 发一条!
    博客logo 博客 | 棋の小站 记录学习,心得,状态,生活。
    ICP 冀ICP备2023007665号 ICP 冀公网安备 13030202003453号

    🕛

    本站已运行 221 天 14 小时 3 分

    👁️

    今日访问量:106 昨日访问量:2564

    🌳

    建站:Typecho 主题:MyLife
    博客 | 棋の小站. © 2023 ~ 2023.
    网站logo

    博客 | 棋の小站 记录学习,心得,状态,生活。
     
     
     
     
    壁纸