关于函数filter
def is_not_empty(s):
return s and len(s.strip()) > 0
filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])
上面代码中: return s and len(s.strip()) > 0是什么意思???
def is_not_empty(s):
return s and len(s.strip()) > 0
filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])
上面代码中: return s and len(s.strip()) > 0是什么意思???
2017-02-12
因为list['test', None, '', 'str', ' ', 'END'] 中,有个特殊元素None(None是Python的特殊类型,它不支持任何运算)
如果像下面这样
def is_not_empty(s): return len(s.strip()) > 0 print filter(is_not_empty, ['test',None, '', 'str', ' ', 'END'])
会报错误:AttributeError: 'NoneType' object has no attribute 'strip'
英语不好,基本意思是None没有strip方法,所以遇到None元素的时候就报错了
可以试一下,把list中的None删除,就可以正常执行
def is_not_empty(s): return len(s.strip())>0 #没有return s print filter(is_not_empty,['test','','str',' ','END'])
为什么有None的时候return s and len(s.strip()) > 0就可以正常执行呢?
因为当索引到None元素时,s=None,实际已经false了
对于and运算,如果第一个条件为false,后面的条件就不再判断,所以s=None时,不会执行到strip()函数
自然也就不会报错了。
“那为什么上一个例子只需要 return x % 2 == 0 而不是return x and x % 2 == 0” ?
因为x没有等于None的时候,所以省略了【x and】。
如果自己在list中添加None,也会出错了。
原因就是None None None
举报