格式化字符串输出

在对字符串格式化进行输出时,最常见的方法就是使用%格式化字符串。这种方法虽然用法简单,但是在遇到需要有多个参数传入时就显得有些麻烦。其实还有以下几种格式化输出字符串的方法。

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}")

可能存在的问题

  1. 引号问题

f-string大括号内使用的引号不能和大括号外的引号定界符引号冲突,需根据情况灵活切换使用单引号、双引号、单三引号、双三引号。

只要大括号内外的引号不同,就没有问题。但是大括号中只能是单引号和双引号 ,大括号外的引号定界符引号可以使用单引号、双引号、单三引号、双三引号。

  1. 大括号外的引号还可以使用\转义,但大括号内不能使用\转义

  2. 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)
posted @ 2023-06-25 15:13  结了冰的可乐  阅读(67)  评论(0)    收藏  举报