面试题答案
一键面试import timeit
class CustomNumber:
def __init__(self, value):
self.value = value
def __lt__(self, other):
return self.value < other.value
def __gt__(self, other):
return self.value > other.value
def __eq__(self, other):
return self.value == other.value
# 性能优化思路:
# 1. 避免复杂计算,这里只比较一个简单的数值属性,不存在复杂计算
# 2. 直接使用基本数据类型的比较操作,这些操作在底层已经经过高度优化
# 性能测试
setup = '''
from __main__ import CustomNumber
a = CustomNumber(5)
b = CustomNumber(10)
'''
test_lt = timeit.timeit('a < b', setup=setup, number=1000000)
test_gt = timeit.timeit('a > b', setup=setup, number=1000000)
test_eq = timeit.timeit('a == b', setup=setup, number=1000000)
print(f"小于比较耗时: {test_lt} 秒")
print(f"大于比较耗时: {test_gt} 秒")
print(f"等于比较耗时: {test_eq} 秒")
上述代码中:
- 定义了
CustomNumber
类,包含value
属性,并实现了数值比较操作符的重载。 - 性能优化思路主要是直接利用基本数据类型的比较操作,因为这些操作在Python底层是高度优化过的,避免了复杂的自定义计算逻辑。
- 使用
timeit
模块进行性能测试,setup
部分定义了测试所需的初始化代码,timeit
函数中的字符串是要测试的具体比较操作,number
指定了执行测试操作的次数,通过观察不同操作的耗时来证明优化后的效果。