MST

星途 面试题库

面试题:Python数值比较操作符在自定义类中的重载与性能优化

定义一个自定义类,其中包含多个数值属性。重载该类的数值比较操作符(如 __lt__、__gt__、__eq__ 等),使得该类的实例对象之间可以进行合理的数值比较。同时,在重载过程中考虑性能优化,比如避免不必要的计算,说明优化思路,并通过性能测试代码(如使用timeit模块)来证明优化后的效果。
23.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
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} 秒")

上述代码中:

  1. 定义了CustomNumber类,包含value属性,并实现了数值比较操作符的重载。
  2. 性能优化思路主要是直接利用基本数据类型的比较操作,因为这些操作在Python底层是高度优化过的,避免了复杂的自定义计算逻辑。
  3. 使用timeit模块进行性能测试,setup部分定义了测试所需的初始化代码,timeit函数中的字符串是要测试的具体比较操作,number指定了执行测试操作的次数,通过观察不同操作的耗时来证明优化后的效果。