f-strings: Python字符串处理的瑞士军刀

从 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' 

参考

发表评论

相关文章