gpt4 book ai didi

Python boolean (省略号)和 boolean (无)

转载 作者:太空狗 更新时间:2023-10-30 02:05:47 25 4
gpt4 key购买 nike

我不明白 EllipsisNone 如何被 bool() 不同地处理,当两者在真值检验的相关属性。

>>> bool(Ellipsis)
True
>>> bool(None)
False
>>> any([hasattr(Ellipsis, attr) for attr in ['__len__', '__bool__', '__nonzero__']])
False
>>> any([hasattr(None, attr) for attr in ['__len__', '__bool__', '__nonzero__']])
False
  1. 我还遗漏了一些用于真实性检验的东西吗?

  2. 是否有任何其他对象(None 除外)的计算结果为 False,但既没有实现 __len__ 也没有实现 __nonzero__ ?

最佳答案

bool(x)True如果x是一个没有你提到的返回 False 的神奇方法之一的对象.这就是为什么 Ellipsis评估为 True .

Nonespecial-casedbool()并让它返回 False .

详细信息:

bool()使用 PyObject_IsTrue() 2.7.2 中的 API 函数如下所示:

int
PyObject_IsTrue(PyObject *v)
{
Py_ssize_t res;
if (v == Py_True)
return 1;
if (v == Py_False)
return 0;
if (v == Py_None)
return 0;
else if (v->ob_type->tp_as_number != NULL &&
v->ob_type->tp_as_number->nb_nonzero != NULL)
res = (*v->ob_type->tp_as_number->nb_nonzero)(v);
else if (v->ob_type->tp_as_mapping != NULL &&
v->ob_type->tp_as_mapping->mp_length != NULL)
res = (*v->ob_type->tp_as_mapping->mp_length)(v);
else if (v->ob_type->tp_as_sequence != NULL &&
v->ob_type->tp_as_sequence->sq_length != NULL)
res = (*v->ob_type->tp_as_sequence->sq_length)(v);
else
return 1;
/* if it is negative, it should be either -1 or -2 */
return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
}

关于Python boolean (省略号)和 boolean (无),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8720711/

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