辨析True/False/None/is/==
之前看到有人在写代码时,定义了一个列表l = []
然后在处理过程中直接if l is True
或者if l is None
首先,True和False的类型都是bool类型,它们的值分别等于1或者0。也就说所有等于1的变量都等于True,所有等于0的变量都等于False。
所以,所以拿一个列表和True、False比较,永远是错误的。那么len(name_list) is True
是正确的吗?既然True等于1,False等于0,用列表的长度和True、False比较总可以吧?不,仍旧错误!因为这里又混淆了is和==的区别:
-
==比较的是两个变量的值,只要值相等该逻辑表达式就成立
-
is比较的是两个变量的值和id,什么时候可以is成立呢?前提是值必须相同,再次类型必须相同,0==True,但是0的类型是int,True的类型是bool,所以0 is True怎么可能会成立呢?最后,id必须一样,在一个作用域内,创建两个值相同的字符串,它们的id是一样的;但是创建两个值一样的列表,它们的id仍旧不一样!
搞清楚了==和is后,再来聊聊None
刚才说了True和False的误区后,其实还有部分人另辟蹊径,使用None来判断列表是否为空,只可惜,越错越远
[] is None
和[] == None
这两种写法,到底谁对谁错呢?都错!
None是一个特殊的变量,它的类型是NoneType,意思就是没有类型,也没有值,那么想判断空列表、空字典、空元组,怎么可能和None比?
但是None可以重新转换成其余的变量类型的,比如a = None
,然后a = [1,2]
。另外在python3中,不可以用==接None,必须使用is,为什么呢?因为None很特殊,它只有唯一一个,意思就是定义再多的None,其实都是那个唯一的None,所以只能用is None啦。
最后,当你想判断列表为空,到底该怎么办呢?
我们知道if判断的是语句的真假,什么是真假?在python中,假有以下几种情况:
-
所有空列表、空字符串、空字典等等都是假
-
所有零值都是假,False也是假
-
最后,最特殊的None也是假
除假以外全部为真。所以判断列表为空,只需要if l:
即可。
python最大整数是多少?
很多帖子上都使用了sys.maxint,得到的值为2147447412 ,可是这个用法已经弃用了,新版本的用法为:sys.maxsize,在64位机上大小扩展到了9223372036854775807,达到了惊人的九百二十二万亿。可惜,我在测试type(sys.maxsize**2)之后发现仍旧是一个整数,也就是说python的int整数已经没有上限了。