Python 方便快捷的 f-string 方法
文章目录
前言
f-string 方法 为字符串格式化方法之一,欲要了解更多请移步总集篇 Python 字符串格式化最强详解2.0 『如何输出好看的内容』
最方便快捷的 f-string 方法😍
f-string 只是一个简称,中文释义 f-字符串 ,Python 官方对其的命名为 格式化字符串字面值,这是一个较新的 字符串格式化 方法,伴随着 Python3.6 的发布而诞生,也是到目前而言,最方便快捷的 字符串格式化 方法,我最常用的就是这种方法
(一)、f-string 方法的基本使用
这个简称来由的原因也很有趣,先来看一段 f-string 字符串格式化的简单使用语法
name1 = "张三"
name2 = "罗翔"
print(f"{name1}他是一个{'法外狂徒'},今天他遇到了{name2},从此改过自新")
- 首先看看结构,因为在字符串前面带有一个
f
或F
的前缀,所以又将其 称为 f-string 字符串格式化 方法,是不是很直接呢 - 在
{
和}
字符之间写 可以引用的变量,字段,表达式等,在上面的代码中,使用了两种方法,一是引用变量,二是直接在花括号里写入 内容 - 在花括号中写入字符串内容,需要注意字符串引号不能与外层字符串引号一致,如果外层为双引号,那花括号内字符串应为单引号
传入各种类型
上面只是简简单单的传入了 字符串类型的数据,那再尝试入其他类型
p1 = 6 # 整数类型
p2 = 2.3333 # 浮点数类型
p3 = 2e+2 # 科学计数法
p4 = 2**3 # 运算符
p5 = True if 1 == 1 else False # 三元表达式
p6 = list(range(5)) # 列表
p7 = [i*10 for i in range(1, 5)] # 列表生成式
print(f"{p1}|{p2}|{p3}|{p4}|{p5}|{p6}|{p7}")
print("{}|{}|{}|{}|{}|{}|{}".format(p1, p2, p3, p4, p5, p6, p7))
6|2.3333|200.0|8|True|[0, 1, 2, 3, 4]|[10, 20, 30, 40]
6|2.3333|200.0|8|True|[0, 1, 2, 3, 4]|[10, 20, 30, 40]
其实看到这,应该就能明白为啥说 f-string 是最方便快捷的 字符串格式化方法
- f-string 和
.format()
字符串格式化 方法一样也能摆脱 占位符数据类型判断 的烦恼,且从使用语法上看,无非是一个写在花括号里,一个写在花括号外,两则使用起来大同小异。 - 从结构长度和可阅读性上来说,f-string 方法明显更胜一筹,能很清楚的知道哪个花括号对应了什么样的值,直接明了
(二)、f-string 方法的功能
f-string 方法更像是 .format()
方法的升级版
- 一是体现在都是使用到了花括号,二是其功能继承了
.format()
方法,同时其功能也更完善 - f-string 方法的功能,我认为 以书写格式中的冒号为划分成两部分:冒号前和冒号后👇
1) 冒号前
Ⅰ. f-string的转换符
这里说的转换符和 上面两个方法中的转换符不太一样,f-string 方法的转换符是调用 内置函数对 求值结果先转换再格式化,转换符配合感叹号使用
转换符 | 调用函数 | 函数作用 |
---|---|---|
!s | str() | 将对象转化成字符串 |
!r | repr() | 将对象转化成可打印表示形式的字符串(解释器读取的形式) |
!a | ascill() | ASCII编码字符直接返回内容,非ASCII编码字符会使用 \x、\u 和 \U 来转义 |
这里简单说一下
str()
和repr()
的差别,str是将对象或则说一个内容转化成字符串,在打印出来的时候是不带有引号的,如果是一个字符串对象时,str()
会自动识别,不做任何更改。repr()
的差别就在这,使用这个函数,会对字符串再字符串化一次,也就是变成嵌套字符串,在打印时是带引号的
print(f"转换符!s: {'张三'!s} ")
print(f"转换符!s: {56!s} ")
print(f"str(): {str('张三')} ")
print(f"转换符!r: {'张三'!r} ")
print(f"转换符!r: {56!r} ")
print(f"repr(): {repr('张三')} ")
print(f"转换符!a: {'张三'!a} ")
print(f"转换符!a: {56!a} ")
print(f"ascii(): {ascii('张三')} ")
转换符!s: 张三
转换符!s: 56
str(): 张三
转换符!r: '张三'
转换符!r: 56
repr(): '张三'
转换符!a: '\u5f20\u4e09'
转换符!a: 56
ascii(): '\u5f20\u4e09'
Ⅱ. 变量名显示
在 f-string 功能中有个等号,如果使用此功能,输出将包含表达式文本,此功能是 3.8 版本功能,注意匹配Python版本使用
name = "张三"
job = "法外狂徒"
print(f"{name=}")
print(f"{name = !r}")
print(f"{name + '是' + job= }")
name='张三'
name = '张三'
name + '是' + job= '张三是法外狂徒'
- 使用 = 号 功能时,表达式中的空格也会一并输出
2) 冒号后
Ⅰ. 对数字类型处理
指定小数精度和带符号处理
x = 2.33333
print(f"{x:.2f}")
print(f"{x:+.2f}")
print(f"{x:+}")
print(f"{2.333:+.2f}")
2.33
+2.33
+2.33333
+2.33
Ⅱ. 对齐与填补
x = "张三"
print(f"左对齐: {x:<10}")
print(f"右对齐: {x:>10}")
print(f"居中对齐: {x:^10}")
如果不指定填充字符,那么输出的结果是将默认以空格为填充,如果指定填充类型的话,书写格式如下👇🏻
x = "张三"
print(f"左对齐: {x:-<10}")
print(f"右对齐: {x:->10}")
print(f"居中对齐: {x:-^10}")
是不是感觉冒号后的写法很眼熟呀,没错!大致就是
.format()
的写法,这也是前面提到的 f-string 方法更像是 .format() 方法的升级版的原因,可以去尝试一下.format()
其他的一些功能写法写在冒号后面
(三)、书写格式和优先顺序👺
f-string 方法书写格式如下: 👇
英文原文
"{f_expression[=][! conversion][: format_spec]}"
中文释义
{f表达式[=][! 转换][: 格式规格]}
- f表达式 f_expression: 看起来高大上,其实就是指 变量,字段,表达式
- =: 输出将包含表达式文本,’=’ 以及求值结果,参考 Ⅱ. 变量名显示
- ! 转换 ! conversion: 参考 Ⅰ. f-string的转换符
- : 格式规格 : format_spec: 就是使用.format 的功能,详情参考 (二)、.format 方法的功能
但对于特殊的对象,比如 datetime,还能这么去做now = datetime.datetime.now() print(f"{now:%Y-%m-%d}") print("{:%Y-%m-%d}".format(now))
2021-04-14 2021-04-14
.format
同样适用