Python 与'None'比较将生成elementwise对象
显然,(在“未来”)不可能再使用以下各项:Python 与'None'比较将生成elementwise对象,python,numpy,Python,Numpy,显然,(在“未来”)不可能再使用以下各项: import numpy as np np.array([0,1,2]) == None > False > FutureWarning: comparison to `None` will result in an elementwise object comparison in the future. 这也打破了numpy阵列的延迟加载模式: import numpy as np def f(a=None): if a ==
import numpy as np
np.array([0,1,2]) == None
> False
> FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.
这也打破了numpy阵列的延迟加载模式:
import numpy as np
def f(a=None):
if a == None:
a = <some default value>
<function body>
将numpy导入为np
def f(a=无):
如果a==无:
a=
还有什么其他可能性允许您仍然使用延迟初始化?您正在寻找的
是:
if a is None:
a = something else
问题是,通过使用=
操作符,如果输入元素a
是numpy数组,numpy将尝试执行元素级比较,并告诉您无法进行比较
对于a
一个numpy数组,a==None
给出错误,np.all(a==None)
没有(但没有达到预期效果)。相反,无论a
的数据类型如何,a
都将起作用,因此从Java的角度来看,is
被视为参考检查,而==
被视为equals()
检查(可以被覆盖,如果不被覆盖,它只是一个参考检查)@Matthias。从java的角度来看,python的=
将触发java的.equals
,它在numpy
中被重写以执行元素检查。Python的是
相当于在java中检查引用(类似于对字符串使用=
)。但是,对于python中的字符串(即a='hello';b='hello'
),a is b
仍将返回true,因为它们都是相同的常量('hello'
)。@Matthias查看is
操作符的更多细节。最后一次比较在Java中也是true(或者依赖于VM?)@Matthias说实话,很久没有用Java编程了,所以可能是哈哈。只是想指出python=P中的行为