从 3.6 开始,Python 新增了一个格式化字符串的方法,称之为 f-string。

其用法就是在python原始字符串的基础上增加 f/F 前缀,以大括号 {} 标明被替换的字段。

f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。

变量嵌入 & 变量拼接

改变以往占位符或加号拼接的方式,使得字符串拼接更加简单直观,可读性也更好。

name = "Tom"

print(f"I'm {name}")
# I'm Tom

表达式求值

print(f"3 x 2 = {3*2}")
# 3 x 2 = 6 print(f"{3 * 2 = }")
# 3 * 2 = 6

调用函数

name = "Tom"

print(f"I'm {name.lower()}")
# I'm tom

多行string

name, job = "tom", "student"

s = f"""I'm {name.capitalize()},
and I'm a {job.capitalize()}""" print(s)
"""
I'm Tom,
and I'm a Student
"""

对齐

先看下语法规则:

Syntax: {:[width][.precision][type]}

对齐效果由width控制:

  • <:左对齐
  • >:右对齐(默认)
  • ^:居中对齐
word = "python"

>>> f"|{word:<10}|"
'|python |' >>> f"|{word:>10}|"
'| python|' >>> f"|{word:^10}|"
'| python |'

带有补全的对齐效果:

# 本例用小数点来补全空余内容
>>> f"|{word:.<10}|"
'|python....|' >>> f"|{word:.>10}|"
'|....python|' >>> f"|{word:.^10}|"
'|..python..|'

例子:

格式化一个日期,要求月份、天数用两位表示,不足两位补0

year, month, day = 2022, 1, 1

>>> f"{year}-{month:0>2}-{day:0>2}"
'2022-01-01'

数字格式化

Syntax: {:[width][.precision][type]}

由precision指定精度,type对应数据类型。

type:

  • s:字符串格式(默认)
  • d:整型
  • e:科学计数,默认precision为6
  • f:浮点数,默认precision为6
  • %:百分比格式,默认浮点数格式,外加百分比格式化

浮点数精度格式化

同时会自动四舍五入。

pi = 3.141592654
print(f"PI = {pi:.2f}")
# PI = 3.14 print(f"PI = {pi:.3f}")
# PI = 3.142

科学计数

print(f"{pi:e}")
# 3.141593e+00 print(f"{pi:.2e}")
# 3.14e+00

百分比格式化

兼顾小数位保留和百分号格式化功能。

print(f"PI = {pi:.3%}")
# PI = 314.159% print(f"PI = {pi:.2%}")
# PI = 314.16%

千位分隔符

使用 , 格式化数字展示(常用于金额),易于阅读

>>> f"{234234234:,}"
'234,234,234' >>> f"{234234234.1314:,.2f}"
'234,234,234.13'

进制转换

先看看python中常用的用法及其效果:

num = 23
bin(num) # '0b10111'
oct(num) # '0o27'
hex(num) # '0x17'

在f-string中,b、o、d、x分别代表二进制、八进制、十进制、十六进制

f"{num:b}"	# '10111'
f"{num:o}" # '27'
f"{num:d}" # '23'
f"{num:x}" # '17'

要想实现常用用法的效果,进制规则代码前需要加#号:

f"{num:#b}"	# '0b10111'
f"{num:#o}" # '0o27'
f"{num:#d}" # '23'
f"{num:#x}" # '0x17'

lambda表达式

>>> f"result is {(lambda x: x**2+1)(5)}"
'result is 26'

日期格式化

日期格式信息,适用于 datedatetimetime 对象

today = datetime.datetime.today()
f"{today:%Y}" # '2022'
f"{today:%Y-%m}" # '2022-12'
f"{today:%Y-%m-%d}" # '2022-12-16' f"{today:%F}" # '2022-12-16'
f"{today:%D}" # '12/16/22'
f"{today:%X}" # '21:01:27'
f"{today:%F %X}" # '2022-12-16 21:01:27'

参考

f-strings: Python字符串处理的瑞士军刀的更多相关文章

  1. StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing the strings?

    StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing t ...

  2. RMQ 字符串 F. Strings and Queries

    F. Strings and Queries time limit per test 2.5 s memory limit per test 256 MB input standard input o ...

  3. python 字符串探讨

    本文内容基于python3 几乎所有有用的程序都会涉及到某些文本处理,不管是解析数据还是产生输出.字符串的学习是重点中的重点,这一节将重点关注文本的操作处理,比如提取字符串,搜索,替换以及解析等.大部 ...

  4. python——字符串 & 正则表达

    raw字符串(原始字符串) 所见即所得,例如r''My's\n'' Python转义字符 在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符.如下表: 转义字符 描述 \(在行尾时) 续 ...

  5. python字符串的方法

    python字符串的方法 ############7个基本方法############ 1:join def join(self, ab=None, pq=None, rs=None): # real ...

  6. python字符串、字符串处理函数及字符串相关操作

    python字符串.字符串处理函数及字符串相关操作 字符串介绍 python字符串表示 Python除处理数字外还可以处理字符串,字符串用单撇号或双撇号包裹: >>> 'spam e ...

  7. Python 字符串

    Python访问字符串中的值 Python不支持单字符类型,单字符也在Python也是作为一个字符串使用. Python访问子字符串,可以使用方括号来截取字符串,如下实例: #!/usr/bin/py ...

  8. Python 字符串格式化

    Python 字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存 一 ...

  9. Python 字符串处理大全.

    Python 字符串 字符串是Pyhton中常用的数据类型,我们可以使用引号来创建字符串 . 创建字符串很简单 , 就不说了 . Python 访问字符串中的值 鬼叔本着简洁 使用的设计目的 , 在设 ...

  10. 7.python字符串-内置方法分析

    上篇对python中的字符串内置方法进行了列举和简单说明,但这些方法太多,逐一背下效率实在太低,下面我来对这些方法按照其功能进行总结: 1.字母大小写相关(中文无效) 1.1 S.upper() -& ...

随机推荐

  1. 安全强化Linux 服务器的七个步骤

    这篇入门文章将向你介绍基本的 Linux 服务器安全知识.虽然主要针对 Debian/Ubuntu,但是你可以将此处介绍的所有内容应用于其他 Linux 发行版.我也鼓励你研究这份材料,并在适用的情况 ...

  2. .NET6 使用 AutoMapper (解析)

    一.Net 6环境下的.net core项目里如何使用AutoMapper实现依赖注入. 注: AutoMapper 是一个对象-对象映射器,可以将一个对象映射到另一个对象. 第一步,在Nuget引入 ...

  3. Jpa常用API

    service中执行sql 根据请求参数拼接sql import javax.persistence.Query; import javax.persistence.EntityManager; @A ...

  4. 多云容器编排 Karmada-Operator 实践

    作者:vivo 互联网服务器团队-Zhang Rong Karmada作为开源的云原生多云容器编排项目,吸引了众多企业共同参与项目开发,并运行于生产环境中.同时多云也逐步成为数据中心建设的基础架构,多 ...

  5. PAT (Basic Level) Practice 1025 反转链表 分数 25

    给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输出应该 ...

  6. 第二周python作业

    print("今有不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?\n") number=int(input("请输入您认为符合条件的数: ")) ...

  7. 谣言检测()《Data Fusion Oriented Graph Convolution Network Model for Rumor Detection》

    论文信息 论文标题:Data Fusion Oriented Graph Convolution Network Model for Rumor Detection论文作者:Erxue Min, Yu ...

  8. Spring Boot 源码学习之转载

    这次的学习,主要转载了 波波老师的笔记,后续会自己整理一份 1.Spring-Boot源码分析-源码编译:https://dpb-bobokaoya-sm.blog.csdn.net/article/ ...

  9. 【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表II

    [算法训练营day4]LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表 ...

  10. sentinel的四种流控规则介绍

    sentinel的四种流控规则介绍 今天的内容我们主要围绕四个点进行展开介绍. 流控模式 :关联.链路 流控效果 :Warm Up.排队等待 这四点具体是什么意思呢? 首先启动项目:cloud-ali ...