首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
真值判断方式
真值判断的字节码
真值判断的源码实现
验证真值判断的过程
数字类型如何作真值判断
判断语句(if)
for循环
while语句
break、continue、pass
迭代器、生成器
列表表达式
集合表达式
字典表达式
当前位置:
首页>>
技术小册>>
Python合辑9-判断和循环
小册名称:Python合辑9-判断和循环
除了这 3 个例子,还有一种情况值得验证,那就是对于数字类型,它们是怎么做真值判断的呢? 可以验证一下数字类型是否拥有那两个魔术方法: ``` hasattr(2020, "__bool__") hasattr(2020, "__len__") ``` 不难验证出,数字拥有的是 __bool__() 魔术方法,并没有__len__() 魔术方法,而且所有类型的数字其实被分成了两类: ● __bool__() 返回 False:所有表示 0 的数字,例如0, 0.0, 0j, Decimal(0), Fraction(0, 1) ● __bool__() 返回 True:所有其它非 0 的数字 小结: Python 中if xxx 这种简便的写法,虽然是正规的真值判断语法,并它但并不符合常规的语义。在 C/C++/Java 之类的语言中,要么 xxx 本身是布尔类型的值,要么是一种可返回布尔类型值的操作,但是在 Python 中,这个“xxx”竟然还可以是任意的 Python 对象! 本文通过对文档、字节码和 CPython 解释器的源码逐步分析,发现了 Python 的真值判断过程并不简单,可以提炼出以下的几个要点: if/while 是隐性的布尔操作符: 它们除了有“判断”真假的作用,还具有隐式地将普通对象计算出布尔结果的功能。实际的操作是解释器根据“POP_JUMP_IF_FALSE”指令来完成的,其核心逻辑跟内置的 bool() 是共用了一个底层方法 真值判断过程依赖两个魔术方法: 除非被判断对象有__bool__() 方法返回False 或者有__len__() 方法返回0 ,否则布尔操作的结果都是 True。 两个魔术方法总是会先计算__bool__() 数字类型也可做真值判断: 数字有__bool__() 魔术方法,但没有__len__() 魔术方法,除了表示 0 的数字为 False,其它数字都为 True
上一篇:
验证真值判断的过程
下一篇:
判断语句(if)
该分类下的相关小册推荐:
Python与办公-玩转Word
Python甚础Django与爬虫
Python神经网络入门与实践
Python合辑7-集合、列表与元组
Python编程轻松进阶(三)
Python合辑3-字符串用法深度总结
Python面试指南
Python合辑4-130个字符串操作示例
Python与办公-玩转Excel
Python编程轻松进阶(五)
Python合辑10-函数
Python机器学习基础教程(下)