为了账号安全,请及时绑定邮箱和手机立即绑定

关于函数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是什么意思???

正在回答

2 回答

因为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    


0 回复 有任何疑惑可以回复我~
#1

qq_苏格拉没有底_14

回答的真好
2017-07-27 回复 有任何疑惑可以回复我~

意思是当字符串长度大于0时返回字符串中的字符

0 回复 有任何疑惑可以回复我~
#1

慕粉3658050

那为什么上一个例子只需要 return x % 2 == 0 而不是return x and x % 2 == 0
2017-02-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255533    人
  • 解答问题       3038    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

关于函数filter

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号