面试题答案
一键面试-
添加缓存功能(使用
functools.lru_cache
装饰器)- 代码示例:
import functools @functools.lru_cache(maxsize=128) def long_running_custom_function(*args, **kwargs): # 这里是复杂的函数逻辑,包含多个循环和条件判断 result = 0 for i in range(10000): for j in range(10000): if i % 2 == 0 and j % 2!= 0: result += i + j return result
- 原理:
functools.lru_cache
装饰器会为函数创建一个缓存,当相同的参数再次调用函数时,它会直接从缓存中返回结果,而不是重新执行函数。这大大节省了计算资源和时间,尤其是对于那些计算成本高且相同输入会经常出现的函数。 - 适用性:适用于函数输入参数相对固定,且函数执行结果不会因外部状态变化而改变的场景。例如,计算数学公式、解析固定格式的数据等。如果函数的输入参数依赖于实时变化的数据,如当前时间、随机数等,使用
lru_cache
可能会导致结果不准确。
-
记录函数执行时间
- 代码示例:
import time def log_execution_time(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"Function {func.__name__} took {end_time - start_time} seconds to execute.") return result return wrapper @log_execution_time def long_running_custom_function(*args, **kwargs): # 这里是复杂的函数逻辑,包含多个循环和条件判断 result = 0 for i in range(10000): for j in range(10000): if i % 2 == 0 and j % 2!= 0: result += i + j return result
- 原理:通过在函数执行前后记录时间戳,并计算两者的差值,从而得到函数的执行时间。这有助于发现性能瓶颈,了解哪些函数占用了较多的时间,以便针对性地进行优化。
- 适用性:适用于任何想要了解函数性能状况的场景。无论是优化单个函数还是分析整个程序的性能,记录函数执行时间都是一个重要的手段。它可以帮助开发者确定哪些函数需要重点优化,以及评估优化措施是否有效。