从 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\'
日期格式化
日期格式信息,适用于 date
、datetime
和 time
对象
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\'
参考
- python docs: Formatted string literals
- PEP 498 – Literal String Interpolation
- A Guide to Formatting with f-strings in Python
- A Simple Guide to String Formatting in Python Using f-strings
本文来自博客园
作者:奥森iorson
转载请注明原文链接:https://www.cnblogs.com/iorson/p/16989227.html
来源:https://www.cnblogs.com/iorson/p/16989227.html
本站部分图文来源于网络,如有侵权请联系删除。