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中的行为