我希望所有涉及一个或多个None变量的数学运算都返回None。
示例:
a = None
b = 7
a*b
我希望最后一行返回None,但它反过来给我一个错误:
TypeError:*不支持的操作数类型*:'NoneType'和'int'
我理解为什么会出现此错误以及所有这些错误,但有没有办法强制结果只是None
?
背景:我有一些函数可以挖掘数据并返回一个名为diff
的值。稍后我将diff
相乘或添加到一些内容以获取有意义的信息,但并非所有原始数据都包含有用的diff
,因此我将其设置为在这些中返回diff = None
案例。我希望能够在绘制结果时跳过这些点。在我绘图时,Python似乎在跳过数组中的None
元素时没有问题,所以我想让操作的结果为None
。
答案 0 :(得分:6)
不是试图强制包含任意其他值的所有数学运算来返回任意其他值,而是可以简单地使用material-icons-css,这是出于这种目的而设计的:
>>> nan = float("NaN")
>>> 7 * nan
nan
>>> 7 + nan
nan
nan
将在整个数学运算中正确级联。
一个好的绘图库也会理解nan
并在绘图时省略它们。但如果没有,只需在绘图前立即将NaN
替换为None
。
答案 1 :(得分:0)
您可以检查参数中是否存在None
,然后提前返回:
def calc(*args, **kwargs):
if None in list(args) + list(kwargs.keys()):
return None
#rest
您也可以编写装饰器并包装现有函数,如果您想将此操作应用于许多现有函数(或者为了清晰起见,甚至只需要一个函数),这将更有用:
def return_none_for_none(f):
def wrapped(*args, **kwargs):
return None if None in list(args) + list(kwargs.keys()) else f(*args, **kwargs)
return wrapped
@return_none_for_none
def some_math_exp(a, b, c=2):
return a + b*c
答案 2 :(得分:0)
没有太多的代码结构上下文;我假设你只想尝试一个操作,如果不可能则返回None。
也许try / except可以在这里工作:
try:
# operation here
except TypeError:
return None
但是我同意 @donkopotamus ,使用NaN
浮点值完全符合您的要求。如果您尝试评估的表达式包含NaN
,那么整个表达式的计算结果为NaN
。如果找到None
,您可以随时返回NaN
,或者在将数据传递给数学库时转换数据。
>>> nan = float('NaN')
>>> nan + 15 ** 4
nan
>>> 1000 - nan /6%3
nan
>>>