首页 > 代码库 > filter
filter
看到一个比较有趣的程序
def not_empty(s):
return s and s.strip()
print(list(filter(not_empty, [‘A‘, ‘‘, ‘B‘, ‘C ‘,None, ‘ ‘])))
结果是[‘A‘, ‘B‘, ‘C ‘]
这里的函数我本来自己写成如下:
def not_empty(s):
return s.strip()
报错,提示None没有strip这个属性,所以第一个代码段中用到了return s and s.strip(),连顺序都不能变,否则还是会出错
这里解释一下:
Python中and是从左到右计算,若所有值为真,则返回最后一个值,若存在假,则返回第一个假值,所以正常情况下
1、‘A‘进入filter之后,先计算s=‘A‘为真,再计算s.strip()为真,所以返回s.strip()=‘A‘
这是一个真值,所以‘A‘成功筛选了
2、‘‘进入filter之后,先计算s=‘‘为假,所以返回s=‘‘
这是一个假值,所以‘‘筛选失败
3、‘C ‘进入filter之后,先计算s=‘C ‘为真,再计算s.strip()=‘C‘为真,所以返回s.strip()=‘C‘
这是一个真值,所以‘C ‘成功筛选
4、None进入filter之后,先计算s=None为假,所以返回s=None
这是一个假值,所以None筛选失败
如果使用s.strip() and s,就会报错提示None没有strip()
filter
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。