原文: 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就需要使用双引号了,否则字符串中的单引号会被错误理解。