一目了然看代码:
#判断字符串是否为空,注意不是s=='' s=' ' if s.strip()=='': print 's is null' #或者 if not s.strip(): print 's is null' #判断变量是否为空,直接用变量为条件 p = '' #这里仅以空字符串为例,其他空值同样适用 if p: print 'p is not empty' else: print 'p is none' #其他三种写法: if X is None: if not X: if not X is None:
详细解释
python语言与其他语言不同,没有NULL类型,空用none来表示,
但同时需要注意,none是有数据类型的,type为‘Nonetype’
因此python中判断对象为不为空时需要注意对象类型
example:
type:str
判断语句:if val.strip() == ‘’:
很容易犯的错误:
if a is None: do something. else: do the other thing.
这样写看起来不错,但实际上会有问题。一般来讲,Python
中会把下面几种情况当做空值来处理:
- None
- False
- 0,0.0,0L
- ”,(),[],{}
其中None
的特殊之处在于,它既不是数值0
,也不是某个数据结构的空值,它本身就是一个空值对象。它的类型是NoneType
,它遵循单例模式,也就是说,在同一命名空间下的所有None
其实质上都是同一个空值对象。
>>> id(None) 1795884240 >>> None == 0 False >>> None == '' False >>> a = None >>> id(a) 1795884240 >>> a == None True
上面的判断显然不符合我们的期望:只有当a
被显示赋值为None
的情况下,a==None
才为True
。
那么,对于Python
中更为广义的None
值判断,我们应该怎么做呢?
>>> a = '' #这里仅以空字符串为例,其他空值同样适用 >>> if a: ... print 'a is not empty' ... else: ... print 'a is a empty string' 'a is a empty string.'
可以看出,if a
的判断方式得出了我们想要的结果,那么if a
的判断方式究竟是一个怎样的过程呢?if a
会首先去调用a的__nonzero__()
去判断a是否为空,并返回True/False
,若一个对象没有定义__nonzero__()
,就去调用它的__len__()
来进行判断(这里返回值为0代表空),若某一对象没有定义以上两种方法,则if a
的结果永远为True
接下来验证一下上面的说法:
>>>class A(object): ... def __nonzero__(self): ... print 'running on the __nonzero__' ... return True >>>class B(object): ... def __len__(self): ... print 'running on the __len__' ... return False >>> a, b = A(), B() >>>if a: ... print 'Yep' ... else: ... print 'Nop' running on the __nonzero__ Yep >>>if b: ... print 'Yep' ... else: ... print 'Nop' running on the __len__ Nop
变量判空三种主要的写法有:
第一种:if X is None;
第二种:if not X;
当X为None, False, 空字符串””, 0, 空列表[], 空字典{}, 空元组()这些时,not X为真,即无法分辨出他们之间的不同。
第三种:if not X is None;
在Python中,None、空列表[]、空字典{}、空元组()、0等一系列代表空和无的对象会被转换成False。除此之外的其它对象都会被转化成True。
在命令if not 1中,1便会转换为bool类型的True。not是逻辑运算符非,not 1则恒为False。因此if语句if not 1之下的语句,永远不会执行。
对比:foo is None 和 foo == None
示例:
>>> class Foo(object): def __eq__(self, other): return True >>> f = Foo() >>> f == None True >>> f is None False
python中的not具体表示是什么
在python中not是逻辑判断词,用于布尔型True和False,not True为False,not False为True,以下是几个常用的not的用法:
(1) not与逻辑判断句if连用,代表not后面的表达式为False的时候,执行冒号后面的语句。比如:
a = False
if not a: (这里因为a是False,所以not a就是True)
print “hello”
这里就能够输出结果hello
(2) 判断元素是否在列表或者字典中,if a not in b,a是元素,b是列表或字典,这句话的意思是如果a不在列表b中,那么就执行冒号后面的语句,比如:
a = 5
b = [1, 2, 3]
if a not in b:
print “hello”
这里也能够输出结果hello
not x 意思相当于 if x is false, then True, else False
项目中遇到一个实际的问题:
数据库中看:数据值为null
python读入:type类型结果为str
初步处理结果:如上所示的空字符串方法以及判断none方法各种方法各种试,一直不成功(天真的一直以为null代表这个是空字符串的意思)
后续处理结果:其实就是个‘null’的字符串(不能想太多)
判断语句:if val == ‘null’:
其他判空方法:
# -*- coding: UTF-8 -*- def main(): list_1 = [] # 定义一个空链表 if len(list_1) == 0: # 如果此链表的长度为0则为空 print('None') list_2 = [1] if len(list_2) > 0: # 如果长度大于1则不为空 print('not none') main()
更多资源:
http://stackoverflow.com/questions/26595/is-there-any-difference-between-foo-is-none-and-foo-none
http://stackoverflow.com/questions/2710940/python-if-x-is-not-none-or-if-not-x-is-none