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

为什么不能写成这个形式

print filter(lambda s: s if len(s.strip())>0, ['test', None, '', 'str', '  ', 'END'])

或者为什么不能直接写成

print filter(lambda s: len(s.strip())>0, ['test', None, '', 'str', '  ', 'END'])

正在回答

3 回答

filter()函数接受一个函数f和一个list,此函数f()的返回值必须是布尔值True或False,不能是其他类型。

第一种写法lambda s: s if len(s.strip())>0返回的是s,不是bool,所以不对(而且也缺少else情况的返回);

第二种虽然匿名函数返回的是布尔值,但空值None不能再做删除strip,所以错在list中的None碰到strip()函数会报错(AttributeError: 'NoneType' object has no attribute 'strip')


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

因为

is_not_empty()

函数的返回值是s and len(s.strip())>0

表示返回值应该有s和len(s.strip())>0这两个

而匿名函数也应该返回两个值

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

if else缺一不可 

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

举报

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

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

进入课程

为什么不能写成这个形式

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信