python里None 表示False吗? (我是新手)
来源:互联网 发布:标准件网络销售好学吗 编辑:程序博客网 时间:2024/05/22 01:27
https://www.zhihu.com/question/48707732
作者:灵剑
链接:https://www.zhihu.com/question/48707732/answer/112233903
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://www.zhihu.com/question/48707732/answer/112233903
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这个其实在Python文档当中有写了,为了准确起见,我们先引用Python文档当中的原文:
进行逻辑判断(比如if)时,Python当中等于False的值并不只有False一个,它也有一套规则。对于基本类型来说,基本上每个类型都存在一个值会被判定为False。大致是这样:
In the context of Boolean operations, and also when expressions are used bycontrol flow statements, the following values are interpreted as false:False, None, numeric zero of all types, and empty strings and containers(including strings, tuples, lists, dictionaries, sets and frozensets). Allother values are interpreted as true. (See the__nonzero__()special method for a way to change this.)
进行逻辑判断(比如if)时,Python当中等于False的值并不只有False一个,它也有一套规则。对于基本类型来说,基本上每个类型都存在一个值会被判定为False。大致是这样:
- 布尔型,False表示False,其他为True
- 整数和浮点数,0表示False,其他为True
- 字符串和类字符串类型(包括bytes和unicode),空字符串表示False,其他为True
- 序列类型(包括tuple,list,dict,set等),空表示False,非空表示True
- None永远表示False
自定义类型则服从下面的规则:
- 如果定义了__nonzero__()方法,会调用这个方法,并按照返回值判断这个对象等价于True还是False
- 如果没有定义__nonzero__方法但定义了__len__方法,会调用__len__方法,当返回0时为False,否则为True(这样就跟内置类型为空时对应False相同了)
- 如果都没有定义,所有的对象都是True,只有None对应False
所以回到问题,not None的确会返回True。不过一定要警惕的是,if a is None和if a,if a is not None和if not a不可以随便混用,前面也说过了,它们在很多时候是不同的,比如说当a是一个列表的时候if not a其实是判断a为None或者为空。
所以准确来说,你的这句
state = states.get('texas', None)if not state: ....
其实对应的是
if 'texas' not in states or states['texas'] is None or not states['texas']: ...
它有三种成立的情况:
- dict中不存在
- dict中存在,但值是None
- dict中存在而且也不是None,但是是一个等同于False的值,比如说空字符串或者空列表。
阅读全文
0 0
- python里None 表示False吗? (我是新手)
- python之false和None
- display:none 和visible:false 的区别(转)
- 我是新手
- 我是新手!
- 我是新手
- 我是新手
- 我是新手
- 我是新手
- 我是新手
- 我是新手
- 我是新手
- 我是新手
- 我是新手
- 我是新手
- 我是新手
- 我是新手
- 我是新手
- POJ 1511Invitation Cards
- 十分有用的命令,debug 相关
- 使用Gradle构建多个类型的多个渠道包
- hibernate之一对多的关系配置
- Java远程通讯技术及原理分析
- python里None 表示False吗? (我是新手)
- can控制器SJA1000详解
- CoreDom的增删改查
- Golang 在数据库Replication场景下的应用及GC算法
- xutils网络框架的最简单使用
- Linux的开机过程略解读
- java定时器,Spring定时器和Quartz定时器
- 解决动态生成input无法触发click事件的问题
- Oracle程序包