Python字符串格式化三种方式详解:%、format与f-string
本文深入解析Python中三种主要的字符串格式化方式:%格式符、str.format()以及f-string。通过对比冗长易错的%方式、支持索引与字典解包的format方法,以及性能更优、语法简洁的f-string,帮助开发者根据场景选择最佳实践,提升代码可读性与执行效率。
%格式符的局限性
%格式符
name = '李四'
age = 18
a = "姓名:%s,年龄:%s"%(name,age)
print(a) #姓名:李四,年龄:18
b = "%(name)s,%(age)s"%{'name':'张三','age':18}
print(b) #张三,18
这种格式化方式存在明显缺陷,代码往往冗长且容易引发错误,例如在正确显示元组或字典内容时可能出现偏差。
str.format()方法的进阶用法
str.format()方法
name = '李四'
age = 18
# 替换字段用大括号进行标记
a1 = "hello, {}. you are {}?".format(name,age)
print(a1) #hello, 李四. you are 18?
# 通过索引来以其他顺序引用变量
a2 = "hello, {1}. you are {0}?".format(age,name)
print(a2) #hello, 李四. you are 18?
# 通过参数来以其他顺序引用变量
a3 = "hello, {name}. you are {age1}?".format(age1=age,name=name)
print(a3) #hello, 李四. you are 18?
# 从字典中读取数据时还可以使用 **
data = {"name":"张三","age":18}
a4 = "hello, {name}. you are {age}?".format(**data)
print(a4) #hello, 李四. you are 18?
尽管功能增强,但在处理多个参数或较长字符串时,该方法依然可能显得非常冗长。
f-string的高效与特性
f-Strings
f-string是指以字母 f 或 F 开头的字符串,其中大括号 {} 内包含的表达式会在运行时进行求值并替换。
name = '李四'
age = 18
# F 和 f 的简单使用
b1 = f"hello, {name}. you are {age}?"
b2 = F"hello, {name}. you are {age}?"
print(b1) # hello, 李四. you are 18?
print(b2) # hello, 李四. you are 18?
# 字典也可以
teacher = {'name': 'meet', 'age': 18}
msg = f"The teacher is {teacher['name']}, aged {teacher['age']}"
print(msg) # The comedian is meet, aged 18
# 列表也行
l1 = ['meet', 18]
msg = f'姓名:{l1[0]},年龄:{l1[1]}.'
print(msg) # 姓名:meet,年龄:18.
#可以插入表达式
def sum_a_b(a,b):
return a + b
a = 1
b = 2
print('求和的结果为' + f'{sum_a_b(a,b)}')
#多行f 反斜杠
name = 'barry'
age = 18
ajd = 'handsome'
speaker = f'Hi {name}.'\
f'You are {age} years old.'\
f'You are a {ajd} guy!'
print(speaker) #Hi barry.You are 18 years old.You are a handsome guy!
print(f"{You are very \"handsome\"}") #报错
#括号的处理 -->重点:两对为一组
print(f"{{73}}") # {73}
print(f"{{{73}}}") # {73}
print(f"{{{{73}}}}") # {{73}}
m = 21
# ! , : { } ;这些标点不能出现在{} 这里面。
# print(f'{;12}') # 报错
# 所以使用lambda 表达式会出现一些问题。
# 解决方式:可将lambda嵌套在圆括号里面解决此问题。
x = 5
print(f'{(lambda x: x*2) (x)}') # 10
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













