全网最适合入门的面向对象编程教程:49 Python函数方法与接口-函数与方法的区别和lamda匿名函数

news/2024/9/19 20:14:37/文章来源:https://www.cnblogs.com/FreakEmbedded/p/18414889

全网最适合入门的面向对象编程教程:49 Python 函数方法与接口-函数与方法的区别和 lamda 匿名函数

image

摘要:

在 Python 中,函数和方法都是代码的基本单元,用于封装和执行特定的任务;它们之间有一些重要的区别,而 lambda 匿名函数则是 Python 提供的一种简洁定义小型函数的方法。

原文链接:

FreakStudio的博客

往期推荐:

学嵌入式的你,还不会面向对象??!

全网最适合入门的面向对象编程教程:00 面向对象设计方法导论

全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念

全网最适合入门的面向对象编程教程:02 类和对象的 Python 实现-使用 Python 创建类

全网最适合入门的面向对象编程教程:03 类和对象的 Python 实现-为自定义类添加属性

全网最适合入门的面向对象编程教程:04 类和对象的Python实现-为自定义类添加方法

全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签

全网最适合入门的面向对象编程教程:06 类和对象的Python实现-自定义类的数据封装

全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解

全网最适合入门的面向对象编程教程:08 类和对象的Python实现-@property装饰器

全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系

全网最适合入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则

全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法

全网最适合入门的面向对象编程教程:12 类和对象的Python实现-Python使用logging模块输出程序运行日志

全网最适合入门的面向对象编程教程:13 类和对象的Python实现-可视化阅读代码神器Sourcetrail的安装使用

全网最适合入门的面向对象编程教程:全网最适合入门的面向对象编程教程:14 类和对象的Python实现-类的静态方法和类方法

全网最适合入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__魔法方法

全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则

全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“

全网最适合入门的面向对象编程教程:18 类和对象的Python实现-多重继承与PyQtGraph串口数据绘制曲线图

全网最适合入门的面向对象编程教程:19 类和对象的 Python 实现-使用 PyCharm 自动生成文件注释和函数注释

全网最适合入门的面向对象编程教程:20 类和对象的Python实现-组合关系的实现与CSV文件保存

全网最适合入门的面向对象编程教程:21 类和对象的Python实现-多文件的组织:模块module和包package

全网最适合入门的面向对象编程教程:22 类和对象的Python实现-异常和语法错误

全网最适合入门的面向对象编程教程:23 类和对象的Python实现-抛出异常

全网最适合入门的面向对象编程教程:24 类和对象的Python实现-异常的捕获与处理

全网最适合入门的面向对象编程教程:25 类和对象的Python实现-Python判断输入数据类型

全网最适合入门的面向对象编程教程:26 类和对象的Python实现-上下文管理器和with语句

全网最适合入门的面向对象编程教程:27 类和对象的Python实现-Python中异常层级与自定义异常类的实现

全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规范大汇总

全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函数的使用

全网最适合入门的面向对象编程教程:30 Python的内置数据类型-object根类

全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type

全网最适合入门的面向对象编程教程:32 Python的内置数据类型-类Class和实例Instance

全网最适合入门的面向对象编程教程:33 Python的内置数据类型-对象Object和类型Type的关系

全网最适合入门的面向对象编程教程:34 Python的内置数据类型-Python常用复合数据类型:元组和命名元组

全网最适合入门的面向对象编程教程:35 Python的内置数据类型-文档字符串和__doc__属性

全网最适合入门的面向对象编程教程:36 Python的内置数据类型-字典

全网最适合入门的面向对象编程教程:37 Python常用复合数据类型-列表和列表推导式

全网最适合入门的面向对象编程教程:38 Python常用复合数据类型-使用列表实现堆栈、队列和双端队列

全网最适合入门的面向对象编程教程:39 Python常用复合数据类型-集合

全网最适合入门的面向对象编程教程:40 Python常用复合数据类型-枚举和enum模块的使用

全网最适合入门的面向对象编程教程:41 Python常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列)

全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型

全网最适合入门的面向对象编程教程:43 Python常用复合数据类型-扩展内置数据类型

全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法

全网最适合入门的面向对象编程教程:45 Python实现常见数据结构-链表、树、哈希表、图和堆

全网最适合入门的面向对象编程教程:46 Python函数方法与接口-函数与事件驱动框架

全网最适合入门的面向对象编程教程:47 Python函数方法与接口-回调函数Callback

全网最适合入门的面向对象编程教程:48 Python函数方法与接口-位置参数、默认参数、可变参数和关键字参数

更多精彩内容可看:

给你的 Python 加加速:一文速通 Python 并行计算

一文搞懂 CM3 单片机调试原理

肝了半个月,嵌入式技术栈大汇总出炉

电子计算机类比赛的“武林秘籍”

一个MicroPython的开源项目集锦:awesome-micropython,包含各个方面的Micropython工具库

Avnet ZUBoard 1CG开发板—深度学习新选择

SenseCraft 部署模型到Grove Vision AI V2图像处理模块

文档和代码获取:

可访问如下链接进行对文档下载:

https://github.com/leezisheng/Doc

image

本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail 代码软件对代码进行可视化阅读便于读者理解。

相关示例代码获取链接如下:https://github.com/leezisheng/Python-OOP-Demo

正文

函数和方法

函数是封装了一些独立的功能,可以直接调用,能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值。可以直接在模块中进行定义使用。 所有传递给函数的数据都是显式传递的。

image

方法和函数类似,同样封装了独立的功能,但是方法是只能依靠类或者对象来调用的,表示针对性的操作。方法中的数据 self 和 cls 是隐式传递的,即方法的调用者,同时,方法可以操作类内部的数据。简单的说,函数在 python 中独立存在,可直接使用的,而方法是必须被别人调用才能实现的。

image

简单来说,与类和实例无绑定关系的 function 都属于函数;与类和实例有绑定关系的 function 都属于方法。

实际上,类的方法并不一定必须在类内实现,也可以在类内先声明而不具体实现,在类外部实现并给属性赋值(实现具体方法)。示例代码如下:

_# 定义Cat类_
class Cat:def say(self):print("I' m a cat")cat1 = Cat()
_# 定义lie方法_
lie = lambda self: print("I' m a dog")
_# 添加lie方法_
Cat.lie = lie
_# 查看Cat类属性_
print(dir(Cat))
cat1.lie()

如下为运行结果,可以看到已经成功给 Cat 类添加了 lie 方法。

image

lamda 函数/匿名函数

lambda 函数是一种小型、匿名的、内联函数,它可以具有任意数量的参数,但只能有一个表达式。匿名函数不需要使用 def 关键字定义完整函数。lambda 函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用,例如在 map()、filter()、reduce()等函数中。

lambda 语法格式:

lambda arguments: expression

lambda 表达式的参数:

  • lambda 是 Python 的关键字,用于定义 lambda 函数
  • arguments 是参数列表,可以包含零个或多个参数,但必须在冒号(:)前指定
  • expression 是一个表达式,用于计算并返回函数的结果

以下实例使用 lambda 创建匿名函数,函数参数 a 与 b 相乘,并返回结果:

x = lambda a, b : a * b
print(x(5, 6))

lambda 函数也可以与内置函数如 map()、filter()和 reduce()一起使用,以便在集合上执行操作。

例如与 map()函数配合实现一个列表的平方运算,map()函数的原型是 map(function,iterable,……),它的结果是返回一个列表,这个函数的意义是将 function 应用于 iterable 的每一个元素,结果以列表的形式返回。

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared)

或者与 filter 函数配合,对列表中元素进行筛选。filter()函数能够从可迭代对象(如字典、列表)中筛选某些元素,并生成一个新的迭代器。filter(function, iterable)函数会返回一个可迭代的 filter 对象,可以使用 list()函数将其转化为列表,这个列表包含过滤器对象中返回的所有的项。在下面的例子中,我们将列表中的偶数项筛选了出来:

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)

或是与 reduce()函数进行运算,reduce()函数会对参数序列中元素进行累积。reduce(function, iterable[, initializer])将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

from functools import reducenumbers = [1, 2, 3, 4, 5]_# 使用 reduce() 和 lambda 函数计算乘积_
product = reduce(lambda x, y: x * y, numbers)print(product)

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/797271.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 CrewAI 多智能体框架,手把手构建一个自动化写作应用实战

利用 CrewAI 多智能体框架,我们可以更细粒度的控制智能体和任务,通过不同的流程组织协同多智能体共同完成工作……明月皓皓,星河灿烂,中秋佳节,团圆美满。祝大家中秋节快乐!听说台风要来了,也不知道还能不能吃着月饼赏个月?老牛同学在上文(Agent(智能体)和 MetaGPT,一…

【推荐 - 源码安装】nginx - 安装

准备查看操作系统的版本信息[root@lab10 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)查看操作系统的网卡地址[root@lab10 ~]# ip address show ens32 2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group de…

痞子衡嵌入式:JLink命令行以及JFlash对于下载算法的作用地址范围认定

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是JLink命令行以及JFlash对于下载算法的作用地址范围认定。最近痞子衡在给一个 RT1170 客户定制一个 Infineon MirrorBit 类型 64MB Flash 的 SEGGER 下载算法,做完之后在 JFlash 下测试小数据下载没有问题,但…

软件工程导论——个人项目之论文查重

软件工程导论——个人项目之论文查重这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/homework/13220这个作业的目标 设计一个论文查重算法并实现;学会 Git 版本控制Github仓库…

主从库与切片集群机制

主从库与切片集群机制 主从复制源码剖析 redis的主从复制主要包括全量复制RDB文件,增量复制,长连接同步,使用了基于状态机的设计思想,来实现不同状态和状态间的跳转 基于状态机实现的话,在开发程序时只需要考虑不同状态下具体要执行的操作,以及状态之间的跳转条件即可 四…

数据类型与底层原理

数据类型与底层原理 数据结构 哈希表 redis使用链式哈希来解决哈希冲突,其Hash表实质上是一个二维数组,其中每一项就是一个指向哈希项(dictEntry)的指针 typedef struct dictht {dictEntry **table; //二维数组unsigned long size; //Hash表大小unsigned long sizemask;uns…

软工作业2:个人项目-论文查重

一、github链接这个作业属于哪个课程 首页 - 计科22级12班 - 广东工业大学 - 班级博客 - 博客园 (cnblogs.com)这个作业要求在哪里 个人项目 - 作业 - 计科22级12班 - 班级博客 - 博客园 (cnblogs.com)这个作业的目标 规范代码编写;学习模块化管理程序功能;学会写单元测试二、…

软工第一次编程作业:论文查重

github地址:https://github.com/yingnothing/first.git 个人项目-论文查重这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229GitHub链接 https://github.com/ying…

个人项目——论文查重

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标 个人项目——论文查重一:我的github仓库地址 https://github.com/kelin-KL/kelin-KL 二:PSP表格…

OI海海

在pyq里看到了殿禾Wrose的“X的随波逐流”,附文是“我与OI的365天”,我才想到,我打OI也整整一年了 有人或许不理解我这样的一个蒟蒻为什么这么喜欢喜欢写怀念类的东西,即使到现在我还没有取得任何的奖项以及未来也并没有概率拿牌 因为我只觉得一步步走来,不记得的话,是很…

GIS可视化软件:地理信息与遥感领域中的洞察之眼

在地理信息与遥感技术的广阔天地中,可视化软件如同一双洞察世界的明眸,将复杂的数据编织成生动、直观的画卷,为我们揭示地球的奥秘与城市的律动。本文将深入挖掘其技术核心、应用实例、未来趋势,探讨可视化软件如何为地理信息与遥感技术带来深刻洞见。 可视化软件的核心与技…