python笔记 匿名函数下

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

0 环境

  • 编辑器:idea或vscode
  • 系统版本:windows10
  • python版本:3.9.6

1 前言

之前学到了sorted排序,下面把剩余的函数,都介绍一遍。

2 map函数

如下,使用help命令查看map函数。当我们看到__iter__,next,是不是已经猜到了。 image.png

对每个可迭代的对象进行一个迭代。如下代码:假如直接打印map函数的调用,我们只会得到<map at 一串十六进制>,显然这个结果非我们的真正想要的,想查看每个age的值,一种方式是用list(生成器)的方式转,还有一种方式呢,就是用for循环,得到它们的age值。

def demo10():
    Emp = namedtuple("Emp", ["username", "age"])
    emps = [Emp("zhangsan", 102), Emp("lisi", 92), Emp("wangwu", 32), Emp("wuming", 88)]
    print(map(lambda x: x.age, emps))
    print(list(map(lambda x: x.age, emps)))
    
    for item in map(lambda x: x.age, emps):
        print(item)

image.png

3 filter函数

help打印filter,结果如下,是不是和map有点像。看单词就能猜到了吧,过滤,过滤什么呢,我们过滤掉不想要的,或者说符合我们需要的,留下,不符合的过滤,这里通过函数返回True或False,True则存在,留下,False不存在,过滤掉,python的filter和js中的filter类似。

image.png

比如得到小于90岁的人,这里使用lambda判断小于90的人,最后用list转换一下,得到最终的值。

def demo11():
    Emp = namedtuple("Emp", ["username", "age"])
    emps = [Emp("zhangsan", 102), Emp("lisi", 92), Emp("wangwu", 32), Emp("wuming", 88)]
    print(list(filter(lambda x: x.age < 90, emps)))

if __name__ == '__main__':
    demo11()

image.png

4 总结

如上面的代码,map函数,比如我只要age对应的值,其他的不需要,map就很好的帮我们解决,很像知道map的实现,可类比后面这个代码(fn(item) for item in iter)。而filter和map是不太一样的,map的目的是得到每个Emp里的age中,而filter是为了得到符合项的Emp值,它的函数是为做条件判断,符合的留下,不符合的过滤,比如招人超过35岁不要。filter的实现类比(item for item in iter if fn(x))。map和filter相似之处就是,使用它们,需要使用list或for...in循环,才能拿到值。学会这两个函数,是不是觉得节省了不少代码,而且看起来也高大上多了。

猜你喜欢

转载自juejin.im/post/7126118970247086117