格式化字符串输出
在对字符串格式化进行输出时,最常见的方法就是使用%
格式化字符串。这种方法虽然用法简单,但是在遇到需要有多个参数传入时就显得有些麻烦。其实还有以下几种格式化输出字符串的方法。
str.format()
str.format()
对比之前最常用的方法,相当于用{}
和:
代替了%
。
str.format()
在使用的时候接收的参数个数不限,对参数的位置也不做限制
print("{} {}".format("hello", "world")) #不设置指定位置,按默认顺序
print("{0} {1}".format("hello", "world")) #设置指定位置
print( "{1} {0} {1}".format("hello", "world")) # 设置指定位置
str.format()
可以通过字典和列表索引传递参数,也可以直接设置参数。
# 设置参数
print("{age} {name}".format(age=18, name="TOM"))
# 通过字典设置参数
person = {"age": 18, "name": "TOM"}
print("{age} {name}".format(**person))
# 通过列表设置参数
li = [18, "TOM"]
print("{0[0]} {0[1]}".format(li))
通过字典传入参数的方法有两种,一种是上面代码演示的这种使用 **
操作符将字典解包为关键字参数,并将其传递给 str.format()
的方法之外,另一种是:
print("[{p[age]} {p[name]}]".format(p=person))
对于使用列表同样也是两种方法,而且使用方法和字典方法一致
print("{0} {1}".format(*li))
在有些地方还会看到这种用法:
print("{1[0]} {1[1]}".format(li, li))
这其实是结合了列表传入参数和指定位置,即传入1的0索引和1的1索引对应的参数。
f-string
f-string
是在format
的基础上修改而成的,核心思想和format
相同。
# 基本使用方法
# f-string用大括{ }表示被替换字段,其中直接填入替换内容即可
name = 'Eric'
print(f'Hello {name}')
# 可以在{}内直接填写表达式,Python会求取结果并返回花括号内
print(f'{1 + 1}')
# f-string中使用lambda匿名函数:可以做复杂的数值计算
a = 1
print(f"{(lambda x: x + 1)(a):.2f}")
可能存在的问题
- 引号问题
f-string
大括号内使用的引号不能和大括号外的引号定界符引号冲突,需根据情况灵活切换使用单引号、双引号、单三引号、双三引号。
只要大括号内外的引号不同,就没有问题。但是大括号中只能是单引号和双引号 ,大括号外的引号定界符引号可以使用单引号、双引号、单三引号、双三引号。
-
大括号外的引号还可以使用
\
转义,但大括号内不能使用\
转义 -
f-string大括号外如果需要显示大括号,则应输入连续两个大括号{{ }};大括号内需要引号,使用引号即可
字典格式化字符串
# 字符串模板中使用key
temp = '教程是:%(name)s, 价格是:%(price)010.2f, 出版社是:%(publish)s'
book = {'name':'Python基础教程', 'price': 99, 'publish': 'C语言中文网'}
# 使用字典为字符串模板中的key传入值
print(temp % book)
book = {'name':'C语言小白变怪兽', 'price':159, 'publish': 'C语言中文网'}
# 使用字典为字符串模板中的key传入值
print(temp % book)