目录
1. 概要
Python中有三种字符串格式化的方式:
(1) %-formatting
(2) str.format()
(3) f-strings
本文简要介绍这三种字符格式化方法的使用方式。
2. %-formatting
%-formatting是最古老的字符串格式化方式,是从python问世以来就有的。
%-formatting的使用方式如下所示:
myname = 'Chen Xiaoyuan'
print("Hello, I am %s." % myname)
如果需要插入多个变量的话,需要将这些变量组合成一个tuple使用,如下所示:
myname = 'Chen Xiaoyuan'
profession = 'chip architect'
years = 20
print("Hello, I am %s. I am a %s, with more than %s years experience" % (myname,profession,years))
但是,这种化石级方式已经不受推荐使用了,python官方文档有如下描述:
3. str.format()
str.format()是从python2.6开始导入的新的方式。
基本使用方法如下所示:
myname = 'Chen Xiaoyuan'
profession = 'chip architect'
years = 20
print("Hello, I am {}. I am a {}, with more than {} years experience".format(myname,profession,years))
如上所示,相比%-formatting,字符串替代符用“{}” 替换了%s,用format()替换了% ()。如果仅仅是这样的话,当然就体现不出str.format()方式有啥子好的了。
str.format()中可以通过它们的位置序号来引用,如下所示:
print("Hello, I am {1}, I am {0} " .format (profession, myname) )
可以重复引用,按任意顺序引用,如下所示:
print("\
Hello, I am {1}, I am {0} \n\
I am {0}, I am {1} \n\
I am {1}, I am {0} \n\
-- The important things should be said three times "\
.format (profession, myname) )
在{}中还可以进行诸如数据精度指定之类的格式化,比如说:
import math
print('pi = {0:6.5f}, {0:10.9f}'.format(math.pi))
这后面几个例子充分体现了str.format()相比%-formatting的功能强大和灵活性 。
4. f-strings
f-strings也称为“formatted string literals”,是从python3.6导入的。其特征是:
(1) 格式为:f' '
(2) 在运行时进行评估
(3) 基于__format__ protocol进行格式化
简单的例子:
first_name = "Xiaoyuan"
last_name = "Chen"
profession = "chip architect"
city = "Shanghai"
print(f"Hello, I am {last_name} {first_name}. I am living in {city} ")
print(F"Hello, I am {last_name} {first_name}. I am living in {city} ")
如上所示,格式上与str.format()相似,但是显得更加简洁。
由于f-strings是在运行中进行评估的,你可以把任意有效的python表达式放在其中,比如说数学表达式,甚至函数调用或者方法调用,如下所示:
# You could do something pretty straightforward, like this:
print(f'5! = {5*4*3*2*1}')
# You could do function call or method call inside f-string:
print(f'{myname.lower()} is a chip architect and algorithm engineer')
def factorial(k):
if k <= 1:
return 1
prod = 1
for i in range(2,k+1):
prod *= i
return prod
print(f'20! = {factorial(20)}')
f-strings不仅比str.format()要更为强大和灵活,而且运行速度也更快。
可以参考以下网页了解更多fancier details,还有python官方文档。
ref:
Python 3's f-Strings: An Improved String Formatting Syntax (Guide)