python中filter函数的使用问题
2015-11-26 16:37
861 查看
#wh注意:filter其实是将列表传入函数中,然后根据函数返回true或者false进行筛选,保留true的结果,筛选掉false的结果 def func(s): print s and len(s.strip())>0 return s and len(s.strip())>0 def f(s): print len(s.strip())>0 return len(s.strip())>0 print filter(func,['akb',' ','dffd ']) print '-------' print filter(f,['akb',' ','dffd'])
输出结果:
True
False
True
['akb', 'dffd ']
-------
True
False
True
['akb', 'dffd']
这里有个疑问,既然func函数和f函数运行结果一样,那是不是函数里面就直接写
return len(s.strip())>0就可以了?
看一个例子:
def func(s): print len(s.strip())>0 return len(s.strip())>0 print filter(func,['akb',None,' ','dffd '])结果报错:
True Traceback (most recent call last): File "C:/Users/wt/PycharmProjects/practice1/practice1/shiyanlou/demo.py", line 51, in <module> print filter(func,['akb',None,' ','dffd ']) File "C:/Users/wt/PycharmProjects/practice1/practice1/shiyanlou/demo.py", line 47, in func return len(s.strip())>0 AttributeError: 'NoneType' object has no attribute 'strip' 因为字符串才可以使用strip(或者upper,lower等),None类型是不能使用的,所以会报错
看另一个差不多的例子:
def func(s): print s and len(s.strip())>0 return s and len(s.strip())>0 print filter(func,['akb',None,' ','dffd '])结果:
True None False True ['akb', 'dffd ']
从上面就能看出区别了,这里说一下python的and和or
在python中,and和or执行布尔逻辑运算,但它们返回的不是布尔值,使用and时,如果所有值为真,则返回最后一个真值,如果某个值为假,则返回第一个假值
使用or时,如果所有值为假,则返回最后一个假值,如果有值为真,则返回第一个真值
所以
return s and len(s.strip())>0是一个布尔逻辑判断,如果filter函数中列表元素有None类型,则
(注意:None.strip()的写法是错误的,None类型没有strip,这里只是演示)
它们的结果是None,返回给filter,所以不会报错,但是filter只筛选取出返回是True的值,所以结果列表中是
['akb', 'dffd ']而不是['akb',None, 'dffd ']
因此函数中写return s and len(s.strip())>0的作用是应对列表元素中有像None类型的值,防止出错。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- jQuery plugin items filter
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例