方式一: 使用%
这是最原始的字符串格式化方法,在Python 2.6出现之前,字符串迭代只有一种方法,就是%(也是取模)操作符,%操作符支持unicode和str类型的Python字符串,效果和C语言中的sprintf()方法相似
- 字符串对象具有一个唯一的内置操作:%运算符(模),可以用于格式化操作,具体如下:
In [1]: print('hello, %s' % 'world')
hello, world
In [2]: - 如果要在字符串中嵌入多个变量,则变量必须使用元祖包含,具体如下:
In [2]: name='一叶知秋'
In [3]: age=25
In [4]: print('name:%s, age:%s' % (name,age))
name:一叶知秋, age:25
In [5]: - 存在缺陷
上面的代码示例看起来还能读,但是,一旦开始使用多个参数和更长的字符串,你的代码将变得不那么容易阅读且冗余,
In [22]: print('hello,my name is %s,age is %s, job is %s,location is %s' % (name,age,job,location))
hello,my name is 一叶知秋,age is 25, job is programmer,location is 西安
In [23]:
方式二:使用str.format()
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
- 基本语法是通过 {} 和 : 来代替以前的 % 。
In [9]: print("{:.2f}".format(3.1415926));
3.14 - format 函数可以接受不限个参数,位置可以不按顺序。
#不设置指定位置,按默认顺序
In [5]: print('{} {}'.format('hello','world'))
hello world
# 设置指定位置
In [6]: print('{1}, {0} {1}'.format('hello','python'))
python, hello python
# 使用变量名
In [8]: print('{name},{age}'.format(name='一叶知秋',age=25))
一叶知秋,25 - 存在缺陷
str.format()虽然比%要好些。但是,在处理多个参数和更长的字符串时仍然可能非常冗长
In [22]: print('hello,my name is %s,age is %s, job is %s,location is %s' % (name,age,job,location))
hello,my name is 一叶知秋,age is 25, job is programmer,location is 西安
In [23]:
方式三:f-Strings
Python 3.6 引入了新的字符串格式化方式,f-strings 也称作“格式化的字符串字面量”,它是一个以 f 或 F 开头的字符串,其中以 {} 包含的表达式会进行值替换
- f-Strings的使用方法
In [11]: name='一叶知秋'
In [11]: age=25
In [12]: print(f'name:{name}, age:{age}')
name:一叶知秋, age:25
In [13]: print(F'name:{name}, age:{age}')
name:一叶知秋, age:25 - 运算表达式
# 因为 f-strings 是在运行时计算的,所以你可以在其中放置任意合法的 Python 表达式,比如:
In [14]: print(f"{ 2 * 3 + 1}")
7 - 函数调用
In [15]: def test():
...: return 'hello world'
...:
In [16]: print(f'{test()}')
hello world
执行速度对比
from
执行结果如下:
0.0334645
0.04116740000000001
0.023423
总结
很明显,f-string是执行速度最快的,并且语法是最简洁的,所以如果要格式化字符串的话,推荐使用f-Strings格式化字符串,前提是你的python解释器必须是3.6版本以上。