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

遇到小问题,请教大家

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

请问这个为什么报错?

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

这个里lambda返回的是s啊,为什么会实现功能呢?

正在回答

1 回答

lambda s: s.strip() if len(s.strip()) > 0

s.strip() if len(s.strip()) > 0是返回的值 前面有个return 

你把它加上看看读一下就出问题了

后面s and len(s.strip()) > 0 是个判断条件 你加个return 就读的通了。

就是过滤掉 None 和 '' 所以是and 连接

None 直接判断 s是否为空,''用len(s.trip())判断是否为0


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

吴暖 提问者

要返回不就是过滤后的值嘛,过滤后的值就是s.strip()啊。 s.strip() if len(s.strip()) > 0就是如果过滤后不为空就返回过滤后的值 是哪里不对呢? (本人是刚入门,所以很愚蠢,请见谅) 谢谢不吝赐教!
2018-04-14 回复 有任何疑惑可以回复我~
#2

快乐的时光 回复 吴暖 提问者

简单说就是strip()函数执行了两次,其实只需要执行一次。
2018-04-14 回复 有任何疑惑可以回复我~
#3

吴暖 提问者 回复 快乐的时光

也就是说,先执行and后面的len(s.strip()) > 0,然后返回的s就是过滤后的了,是这样吧
2018-04-14 回复 有任何疑惑可以回复我~
#4

吴暖 提问者

非常感谢!
2018-04-15 回复 有任何疑惑可以回复我~
#5

快乐的时光 回复 吴暖 提问者

对的 主要涉及的是复合语句变量作用域的知识 你可以看一下相关知识。with pleasure.
2018-04-15 回复 有任何疑惑可以回复我~
查看2条回复

举报

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

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

进入课程

遇到小问题,请教大家

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