下面是我如何实现一个泛型函数is_almost_equal(first, second):
首先,复制需要比较的对象(first和second),但不要精确复制:剪切在对象中遇到的任何浮点的不重要的小数位数。
既然已经有了first和second的副本,其中不重要的十进制数字已经消失,那么只需使用==运算符比较first和second。
假设我们有一个cut_insignificant_digits_recursively(obj, places)函数,它与obj重复,但只保留原始obj中每个浮点数的places最有意义的小数位数。以下是is_almost_equals(first, second, places)的工作实现:from insignificant_digit_cutter import cut_insignificant_digits_recursively
def is_almost_equal(first, second, places):
'''returns True if first and second equal.
returns true if first and second aren't equal but have exactly the same
structure and values except for a bunch of floats which are just almost
equal (floats are almost equal if they're equal when we consider only the
[places] most significant digits of each).'''
if first == second: