原文: python-f-string
自3.6版本开始,python引入了一种叫做f-strings的写法,使用改写发可以极大地增强字符串的可读性(当然好处不止这些).
不过在学习f-strings之前,先看看以往的写法都有哪些。
旧方法
在3.6之前,我们常用的字符串格式化写法有两种:
- 使用转移符 
% - 使用字符串的格式化方法 
str.format() 
旧选项1 %
跟其他编程语言一样,python也可以用%来把变量值插入到字符串中的对应位置。写法如下:
1  | name = 'Tom'  | 
输出多个变量时,在%后使用括号将所有变量放到一起:
1  | name1 = 'Tom'  | 
但是转移符这种东西,一个不小心就容易写错。
旧选项2 str.format()
从2.6开始,python为字符串添加了一个format()方法,可以将引入的参数按顺序替换到字符串中的{}处。例如:
1  | name1 = 'Tom'  | 
使用format()你还可以自定义参数的插入顺序,例如:
1  | name1 = 'Tom'  | 
format()方法的功能还不止于此,既然index可以用来出入参数,那可不可以用参数名称呢?毕竟0,1,2,3的可读性有限。答案是可以:
1  | name1 = 'Tom'  | 
既然可以这样写了,那干脆直接引入dict得了.这个也是可以的:
1  | character = {  | 
这样可读性就非常好了,不过在3.6版本,更好的写法出现了。
新方法
关于f-string的引入,可以参看PEP498, 或者Python-doc.  
写法非常简单,在字符串前加f或者F,在字符串中直接插入{变量名},就可以了:
1  | name = 'Tom'  | 
在{}中不仅可以使用字符串,还可以使用运算公式,甚至调用方法:
1  | def change_name(input):  | 
当使用
object时,f-string会默认调用__str__()方法,如果想调用__repr__,需要在对象名后面加!r:
 1
2
3
4 f"{object}"
# 输出 object.__str__()的内容
f"{object!r}"
# 输出 object.__repr__()的内容
最后一个考点:换行。在python中可以使用'''来输出带有换行的字符串,不过直接在前面加上f的结果并不怎么好看:
1  | message = f'''  | 
f-string的换行方法是,在每行的最后添加\
1  | message = f''\  | 
注意 一般情况下f-string使用单引号和双引号没有区别,但比如引用字典,需要单引号来标记key时,f-stirng就需要使用双引号了,否则字符串中的单引号会被错误理解。

