gpt4 book ai didi

python - 在 with None : what if it's an array? 之后定义默认参数

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:27 25 4
gpt4 key购买 nike

我正在将一个参数传递给一个函数,这样我想以通常的方式延迟给出默认参数:

def f(x = None):
if x == None:
x = ...

唯一的问题是 x 可能是一个 numpy 数组。然后 x == None 返回一个 bool 数组,我无法对其进行条件处理。编译器建议使用.any().all()

但是如果我写

def f(x = None):
if (x == None).any():
x = ...

如果 x 变为默认值,这将不起作用,因为那时 None == None 是一个 bool 值,没有 .any() .all() 方法。我的下一步是什么?

最佳答案

None 进行比较时,最好使用 is 而不是 ==。通常它没有什么区别,但由于对象可以自由地以他们认为合适的任何方式实现相等性,因此它并不总是一个可靠的选择。

不幸的是,这是 == 没有削减它的情况之一,因为与 numpy 数组比较会返回一个基于条件的 bool 掩码。幸运的是,在任何给定的 Python 程序中只有一个 None 实例,因此我们实际上可以使用 is< 检查对象的身份 运算符以确定它是否为 None

>>> None is None
True
>>> np.array([1,2,3]) is None
False

因此不需要anyall,您可以将函数更新为:

def f(x=None):
if x is None:
print('None')
else:
print('Not none')

在行动中:

>>> f()
None
>>> f(np.array([1,2,3]))
Not none

关于python - 在 with None : what if it's an array? 之后定义默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51297668/

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