面试题答案
一键面试1. 性能差异及测试代码
在Python中,%s
占位符是较早期的字符串格式化方式,format
方法是后来引入的,而f - strings
是Python 3.6 引入的新特性。
性能方面,f - strings
通常最快,因为它在编译时就进行了格式化操作,而%s
占位符和format
方法是在运行时进行格式化。
以下是测试代码:
import timeit
# 使用 %s 占位符
def using_percent():
name = "John"
age = 30
return "My name is %s and I'm %d years old" % (name, age)
# 使用 format 方法
def using_format():
name = "John"
age = 30
return "My name is {} and I'm {} years old".format(name, age)
# 使用 f - strings
def using_fstrings():
name = "John"
age = 30
return f"My name is {name} and I'm {age} years old"
# 测试性能
print("Using %s:", timeit.timeit(using_percent, number = 100000))
print("Using format:", timeit.timeit(using_format, number = 100000))
print("Using f - strings:", timeit.timeit(using_fstrings, number = 100000))
2. 不同应用场景下的优势
大量数据格式化场景
f - strings
:由于其性能优势,在大量数据格式化时,f - strings
能显著提高效率,减少运行时间。例如在处理大数据集的日志记录场景,如果频繁进行字符串格式化操作,f - strings
可以使程序运行更快。format
方法:也可以胜任大量数据格式化场景,不过相比f - strings
性能略逊一筹。但format
方法具有较好的兼容性,在Python 2.6及以上版本都能使用,所以如果项目需要兼容较旧Python版本,format
方法是个不错选择。%s
占位符:性能相对较差,在大量数据格式化时,运行时间会明显长于f - strings
和format
方法,不推荐用于大量数据格式化场景。
代码简洁性要求高的场景
f - strings
:语法简洁直观,直接将变量嵌入字符串中,代码可读性高。例如构建SQL查询语句,sql = f"SELECT * FROM users WHERE name = '{name}'"
,代码清晰明了。format
方法:虽然也能实现简洁的格式化,但相比f - strings
,语法稍显繁琐。如sql = "SELECT * FROM users WHERE name = '{}'".format(name)
。%s
占位符:语法同样简洁,但缺乏类型安全检查,且可读性不如f - strings
。例如sql = "SELECT * FROM users WHERE name = '%s'" % name
。
格式化参数复杂的场景
format
方法:在处理复杂格式化参数时有优势。比如对数字进行特定格式排版,"{:0>5d}".format(123)
会输出00123
,通过在{}
内使用各种格式化指令,能实现复杂格式化需求。f - strings
:也能实现复杂格式化,但语法结构上没有format
方法那么灵活。例如要实现上述同样功能,f"{123:0>5d}"
,对于特别复杂的嵌套格式化,format
方法可能更易读。%s
占位符:处理复杂格式化参数较为困难,语法不够灵活,通常需要配合其他函数来实现复杂格式化。