MST

星途 面试题库

面试题:Python中%s与f - string占位符的深入对比

在Python中,除了%s和format占位符,f - string也是常用的字符串格式化方式。请详细分析%s与f - string在数据类型支持、表达式处理能力、代码可读性以及在不同版本Python中的兼容性方面的差异。如果处理大量字符串格式化操作,从性能和代码维护角度考虑,你会优先选择哪一种方式,为什么?
27.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

1. 数据类型支持

  • %s
    • 几乎支持所有数据类型,会将数据通过str()方法转换为字符串进行格式化。例如:
num = 123
print('数字:%s' % num)
  • 对于一些特殊类型,如datetime对象,也能直接格式化,但不会进行特定的格式化处理,只是简单转为字符串。
  • f - string
    • 同样支持所有数据类型,在处理复杂数据类型时,可以通过调用对象的方法来实现更丰富的格式化。例如,格式化datetime对象:
from datetime import datetime
now = datetime.now()
print(f'当前日期时间:{now.strftime("%Y-%m-%d %H:%M:%S")}')

2. 表达式处理能力

  • %s
    • 基本不支持表达式计算,只能对单个变量进行格式化。例如不能直接在%s占位符内进行计算:
# 以下代码会报错
# num1 = 1
# num2 = 2
# print('结果:%s' % (num1 + num2)) 
  • f - string
    • 支持在花括号内编写表达式,能实时计算并格式化。例如:
num1 = 1
num2 = 2
print(f'结果:{num1 + num2}') 

3. 代码可读性

  • %s
    • 语法相对古老,占位符和变量分离,当格式化内容较多时,代码结构可能不够清晰。例如:
name = 'Alice'
age = 30
print('姓名:%s,年龄:%s' % (name, age))
  • 阅读代码时,需要先看占位符,再去后面找对应的变量。
  • f - string
    • 更直观,变量和格式化内容在同一处,逻辑清晰。例如:
name = 'Alice'
age = 30
print(f'姓名:{name},年龄:{age}')

4. 不同版本Python中的兼容性

  • %s
    • 从Python诞生就存在,在所有Python版本中都可用,兼容性极好。
  • f - string
    • 从Python 3.6开始引入,在3.6之前的版本不支持。

5. 大量字符串格式化操作时的选择及原因

  • 性能角度
    • f - string性能通常优于%s。f - string在编译时就处理了字符串格式化,而%s是在运行时处理,对于大量格式化操作,f - string的编译时优化能减少运行时开销。
  • 代码维护角度
    • 选择f - string。因为其代码可读性更好,结构清晰,在维护代码时,开发人员能更快速理解和修改格式化逻辑。

综上所述,处理大量字符串格式化操作时,优先选择f - string。