热门标签 | 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



推荐阅读
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
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社区 版权所有