gpt4 book ai didi

python - pytest.approx 如何实现它的魔力?

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:21 24 4
gpt4 key购买 nike

pytest approx 函数看起来真的很酷,正如他们在 documentation 中所说的那样它使用非常直观的语法:

>>> from pytest import approx
>>> 0.1 + 0.2 == approx(0.3)
True
>>> 1 + 1e-8 == approx(1)
True

但这实际上是如何工作的?在第一个示例中,假设左侧缩减为类似 0.29999... 的内容,那么我怎样才能在右侧计算出等于它的内容呢? approx 函数是否知道如何查看 == 运算符的左值?事实上,approx 确实有效,这看起来像是纯粹的魔法,有人可以解释一下它是如何完成巧妙的小把戏的吗?

最佳答案

这是自定义 __eq__ 的标准数据模型 Hook .

下面的简化示例应该可以为您阐明“巫术”。

>>> class MyObj: 
... def __eq__(self, other):
... print(self, "is being compared with", other)
... return "potato"
...
>>> obj = MyObj()
>>> 0.1 + 0.2 == obj
<__main__.MyObj object at 0xcafef00d> is being compared with 0.30000000000000004
'potato'

请注意,float.__eq__ 将首先尝试处理此比较。上面显示的行为以及 approx(0.3) 的行为主要依赖于 float 已明确“选择退出”与 MyObj 进行比较这一事实> 实例。它通过返回一个特殊值 NotImplemented 来实现。 :

>>> (0.1+0.2).__eq__(obj)
NotImplemented

对于实际的 pytest 实现,请查看 python_api.py::ApproxScalar .

关于python - pytest.approx 如何实现它的魔力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com