热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

匿名函数、高阶函数、推导式

前言木子本人搞起Python已有多年,一直觉得什么都会,但是有时候实操起来,才觉得很多底层基础的知识都没有彻底的灵活掌握。另外࿰

前言

木子本人搞起Python已有多年,一直觉得什么都会,但是有时候实操起来,才觉得很多底层基础的知识都没有彻底的灵活掌握。 另外,网上关于Python基础知识的各种普及已有太多太多。 附上相关大神的技术栈:

  • Python3官方文档
  • Python3菜鸟教程
  • Python3廖雪峰的网站

本人的写作水平有限,肯定比不上各种大佬的技术文章。博客只是对于自身知识的总结,提炼,当然如果能够帮助到各位看客,木子本人也非常高兴。


简述

闲话不多说,本篇博客,主要针对Python的

匿名函数 lambda

高阶函数 map reduce filter

推导式 list set dict

三个方面来汇总。


匿名函数

当我们在传入函数时,有些时候,不需要显式地定义函数,那么此时匿名函数就灰常方便了。

Python官方文档--lambda

示例: lambda a, b: a + b实际上就是下面代码的简写

def func(a, b):return a + b

对于匿名函数而言,不用写return,返回值就是该表达式的结果。 因为没有函数名字,不必担心函数名的冲突,此外,匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量,再利用变量来调用该函数:


>>> f = lambda x: x * x
>>> f
<function at 0x10453d7d0>
>>> f(6)
36

那么在一些简单的情况下&#xff0c;尽情的使用匿名函数吧。


高阶函数

何为高阶函数&#xff1f;

能接受函数做参数的函数

因Python中一切皆对象&#xff0c;变量名可以指向函数&#xff0c;而函数的参数可以接收变量&#xff0c;那么一个函数就可以接收另外一个函数作为参数。这就是传说中的高阶函数

map()

老规矩&#xff0c;官方文档走一波&#xff1a;

Python官方文档--map()

针对map(function, iterable, ...)函数&#xff0c;可结合lambda使用&#xff0c;示例如下&#xff1a;

>>> list(map(lambda x:x*x, [1,2,3,4,5]))
>>> [1, 4, 9, 16, 25]

注&#xff1a;Python3中&#xff0c;需要使用list()将map函数返回值转化为列表&#xff0c;若无list()&#xff0c;则结果为&#xff1a;


>>> map(lambda x:x*x, [1,2,3,4,5])
>>>

此外&#xff0c;map()函数不改变原有的 list&#xff0c;而是返回一个新的 list

reduce()

为便于掌握&#xff0c;对比&#xff0c;在总结完map()函数后&#xff0c;我们来看下reduce()函数。

Python官方文档--reduce()

那么从官方文档的介绍来看&#xff1a;

reduce()函数接收的参数和 map()类似&#xff0c;一个函数 f&#xff0c;一个list&#xff0c;但行为和 map()不同&#xff0c;reduce()传入的函数 f 必须接收两个参数&#xff0c;reduce()对list的每个元素反复调用函数f&#xff0c;并返回最终结果值。

示例如下&#xff1a;

from functools import reduce>>> reduce(lambda x, y: x &#43; y, [1, 2, 3, 4, 5])

对结果演示即&#xff1a;((((1&#43;2)&#43;3)&#43;4)&#43;5) &#61; 15 注&#xff1a;

reduce()函数可接收第三个参数&#xff0c;作为函数的起始值

filter()

filter()函数顾名思义&#xff0c;进行过滤判断。

Python官方文档--filter()

对于filter()函数来说&#xff0c;其接收一个函数 f 和一个list&#xff0c;这个函数 f 的作用是对每个元素进行判断&#xff0c;返回 True或 False。

示例&#xff1a;过滤出1~100中平方根是整数的数&#xff1a;

import mathdef func(x):r &#61; int(math.sqrt(x)) # math.sqrt()计算平方根if r * r &#61;&#61; x:return x>>> list(filter(func, range(1, 101)))
>>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

那么从该示例中&#xff0c;我们能够得出结论&#xff1a; filter()根据判断结果自动过滤掉不符合条件的元素&#xff0c;返回由符合条件元素组成的新list。


推导式

推导式在日常工作中是比较好的装逼利器&#xff0c;对于列表&#xff0c;字典&#xff0c;集合的操作&#xff0c;很多时候一行代码即可解决&#xff0c;如若没有&#xff0c;那说明内力还不够深厚&#xff0c;嘎嘎嘎。。。。 对于推导式而言&#xff0c;我们就从

列表推导式

字典推导式

集合推导式

来总结&#xff0c;当然也就这三种。。。

列表推导式

示例&#xff1a;

from random import randint>>> [randint(1, 10) for _ in range(20)]
>>> [8, 2, 7, 9, 7, 3, 10, 10, 2, 10, 5, 9, 4, 7, 9, 2, 10, 6, 10, 7]

字典推导式

示例&#xff1a;

>>> {x: x * x for x in range(10) if x % 3 &#61;&#61; 0}
>>> {0: 0, 3: 9, 6: 36, 9: 81}

集合推导式

鉴于集合具有去重效果&#xff0c;那么我们创建示例&#xff0c;来和列表推导式对比&#xff1a;

from random import randint>>> {randint(1, 10) for _ in range(20)}
>>> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

很神奇有木有&#xff0c;目前写的只是最基本的推导式写法&#xff0c;在实际的工作中&#xff0c;可以添加各种判断&#xff0c;随意灵活运用。

总结

本篇博客侧重于实际工作中代码的简化&#xff0c;重构。若能结合实际工作需求&#xff0c;灵活运用&#xff0c;则能大大简化代码&#xff0c;也方便他人阅读&#xff0c;久而久之&#xff0c;自己的水平也逐渐提高。 起止一个爽字了得&#xff01;&#xff01;&#xff01; 江湖有缘&#xff0c;下期再见&#xff01;

转:https://juejin.im/post/5ced278c518825548c1d4518



推荐阅读
author-avatar
louis_bana
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有