简要说明
f-strings (f-literals) 能让格式化字符串的代码更简洁,也更具有可读性(Python 3.6 及以上)
举几个例子:
import datetime
name = 'Rohcna'
age = 22
anniversary = datetime.date(2020, 1, 1)
在 python 3.5 里如果想把下面几行规整到一行,可能会写:
print(
'My name is {name}, my age is {age}, my anniversary is {anniversary:%A, %B %d, %Y}.'
.format(name=name, age=age, anniversary=anniversary)
)
//My name is Rohcna, my age is 22, my anniversary is Wednesday, January 01, 2020.
但是使用 f-literals 可以这样写:
print(
f'My name is {name}, my age NEXT year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.'
)
//My name is Rohcna, my age is 22, my anniversary is Wednesday, January 01, 2020.
更简单了有木有?
f-strings 的一些语法:
- 表达式有多行时:
age = 22
print(
f'''{
age + 1,
age + 2,
age + 3
}'''
)
//(23, 24, 25)
注意语法!前后都是三个单引号,否则报错
SyntaxError: EOL while scanning string literal
- 表达式内可增添参数
a = 2/3
print('{a:.2}'.format(a=a))
//0.67
print(f'{a:.2}')
//0.67
print(f'Value:{a:.2}')
//Value:0.67
print(f'Value:{a:10.2}')
//Value: 0.67
precision = 4
print(f'Value:{a:10.{precision}}')
//Value: 0.6667
- 更复杂的写法
list = [1, 22, 3, 1]
big = lambda x:x.capitalize()
print(f'list[1] {list[1]} {big("rohcna")} {list.count(1)}')
//list[1] 22 Rohcna 2
print(
f'list[1] '
f'{list[1]} {big("rohcna")} '
f'{list.count(1)}'
)
//list[1] 22 Rohcna 2
顺嘴一提:在缩进的时候,Pycharm 自动给表达式加上了 f’’
- RegExp 库或内置的 re 库中,联合使用 r 和 f
import re
header = 'Subject'
line = 'Subject: Hi'
print(
re.match(fr'^{header}: (.*)', line)
.group(0)
)
//Subject: Hi
print(
re.match(fr'^{header}: (.*)', line)
.group(1)
)
//Hi
print(
re.match(fr'^{header}: (.*)', line)
.group(2)
)
//IndexError: no such group