У меня есть функция foo
которая вызывает math.isclose
:
import math
def foo(..., rtol=None, atol=None):
...
if math.isclose(x, y, rel_tol=rtol, abs_tol=atol):
...
...
Вышеприведенный сбой в math.isclose
если я не rtol
и atol
в foo
:
TypeError: must be real number, not NoneType
Я не хочу помещать системные значения аргументов по умолчанию в мой код (что если они изменятся в будущем?)
Вот что я придумала до сих пор:
import math
def foo(..., rtol=None, atol=None):
...
tols = {}
if rtol is not None:
tols["rel_tol"] = rtol
if atol is not None:
tols["abs_tol"] = atol
if math.isclose(x, y, **tols):
...
...
Это выглядит долго и глупо и распределяет dict
при каждом вызове foo
(который вызывает себя рекурсивно, так что это большое дело).
Итак, что является лучшим способом сказать math.isclose
чтобы использовать допуски по умолчанию?
PS. Есть несколько связанных вопросов. Обратите внимание, что я не хочу знать фактические аргументы по умолчанию для math.isclose
- все, что я хочу, это чтобы он использовал значения по умолчанию, какими бы они ни были.