首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
真值判断方式
真值判断的字节码
真值判断的源码实现
验证真值判断的过程
数字类型如何作真值判断
判断语句(if)
for循环
while语句
break、continue、pass
迭代器、生成器
列表表达式
集合表达式
字典表达式
当前位置:
首页>>
技术小册>>
Python合辑9-判断和循环
小册名称:Python合辑9-判断和循环
找到了 CPython 的源码(文件:ceval.c、object.c): ![](/uploads/images/20230730/b08fd1abb51ef407b7761a3a3338c7c4.png) ![](/uploads/images/20230730/f9386a2e6139b923aa66383cbc5d7df3.png) 可以看出,对于布尔类型的对象(即 Py_True 和 Py_False),代码会进入到快速处理的分支;而对于其它对象,则会用 PyObject_IsTrue() 计算出一个 int 类型的值。 PyObject_IsTrue() 函数在计算过程中,依次会获取 nb_bool、mp_length 和 sq_length 的值,对应的应该就是 __bool__() 和 __len__() 这两个魔术方法的返回值。 这个过程就是前文中所引用的官方文档的描述,正是想要找的答案! 另外,对于内置的 bool(),它的核心实现逻辑正是上面的 PyObject_IsTrue() 函数,源码如下(boolobject.c): ![](/uploads/images/20230730/4d7fda81fda65aab38ba4b191350807b.png) 所以,Python 在对普通对象作真值判断时,并没有隐式地调用 bool(),相反它调用了一个独立的函数(PyObject_IsTrue()),而这个函数又被 bool() 所使用。 也就是说,bool() 与 if/while 语句对普通对象的真值判断,事实上是基本相同的处理逻辑。 知道了原理,就会明白if bool(xxx) 这种写法是多此一举的了(曾见到过)。 至此,已经回答了前文中提出的问题。
上一篇:
真值判断的字节码
下一篇:
验证真值判断的过程
该分类下的相关小册推荐:
Python编程轻松进阶(二)
Python合辑3-字符串用法深度总结
Python合辑5-格式化字符串
Python合辑12-面向对象
Python编程轻松进阶(五)
Python爬虫入门与实战开发(下)
Python爬虫入门与实战开发(上)
Python3网络爬虫开发实战(下)
Python与办公-玩转Excel
Python神经网络入门与实践
Python机器学习基础教程(上)
Python高性能编程与实战