【python 基础篇 十一】python的函数-------函数的偏函数 高阶函数 返回函数 匿名函数 闭包
目录
- 1.偏函数
- 2.高阶函数
- 3.返回函数
- 4.匿名函数
- 5.闭包
1.偏函数
-
概念
当我们写一个参数比较多的函数时,如果有些参数,大部分场景下都是某一个固定值,那么为了简化使用,就可以创建一个新函数,指定我们要使用的函数的某个参数,为某个固定的值;这个新函数就是“偏函数”
-
语法
- 方式一 自己写一个新的
- 方式二 借助functools模块的partial函数
def test(a,b,c,d=1):print(a+b+c+d)test(1,2,3)#输出为 7
#此时如果,test函数中的d的值总是为1,可以把d设置成默认值,但是现在d改变成2了,我们不能直接修改原函数,
#方式一
#test2函数就称为偏函数
def test2(a,b,c,d=2):test(1,2,3)
test2()#输出 8#方式二
import functools
newFunc = functools.partial(test,d=2)
newFunc()#输出 8
2.高阶函数
-
概念
当一个函数A的参数,接收的是另一个函数时,则把这个函数A称为高阶函数
-
注意事项
- 函数也可向数据一样相互传递
#高阶函数举例 sorted函数中key的参数就可以是函数
l = [{"name":"lz2","age":18},{"name":"lz1","age":12},{"name":"lz3","age":25},{"name":"lz5","age":23}]
def getKey(x):return x["age"]
result = sorted(l,key=getKey)
print(result)#输出 [{'name': 'lz', 'age': 12}, {'name': 'lz', 'age': 18}, {'name': 'lz', 'age': 23}, {'name': 'lz', 'age': 25}]
def getKey(x):return x["name"]
result = sorted(l,key=getKey)
print(result)#输出 [{'name': 'lz1', 'age': 12}, {'name': 'lz2', 'age': 18}, {'name': 'lz3', 'age': 25}, {'name': 'lz5', 'age': 23}]#举例 动态计算
def caculate(num1,num2,caculateFunc):print(caculateFunc(num1,num2))
def sum(a,b):return a+b
def jianfa(a,b):return a-b
caculate(5,6,sum)#11
caculate(16,4,jianfa)#12
3.返回函数
-
概念
是指一个函数内部,它返回的数据是另外一个函数,把这样的操作称为“返回函数”
# 举例 根据不同参数,返回不同函数
def getFunc(flag):# 1.定义几个函数def sum(a, b, c):return a + b + cdef jianfa(a, b, c):return a - b - c# 2.根据不同的flag的值,来返回不同的操作函数if flag == "+":return sumelif flag == "-":return jianfa
result = getFunc("+")
print(result(10, 20, 30))#输出为 60
4.匿名函数
-
概念
匿名函数也称为 “lambda函数”,是指没有名字的函数
-
语法
- lambda 参数1,参数2…:表达式
- 限制
- 只能写一个表达式 不能直接return
- 表达式的结果就是返回值
- 只适用于一些简单的操作处理
#匿名函数
result = (lambda x,y :x+y)(1,2)
print(result)#输出 3newFunc = lambda x,y :x+y
print(newFunc(1,2))#输出 3#作用 一些简单的函数不用定义
l = [{"name":"lz2","age":18},{"name":"lz1","age":12},{"name":"lz3","age":25},{"name":"lz5","age":23}]
result = sorted(l,key=lambda x:x["age"])
print(result)#输出 [{'name': 'lz', 'age': 12}, {'name': 'lz', 'age': 18}, {'name': 'lz', 'age': 23}, {'name': 'lz', 'age': 25}]
5.闭包
-
概念
在函数嵌套的前提下,
内层函数,引用了外层函数的变量(包括参数)
外层函数,又把内层函数,当做返回值进行返回
这个内层函数+所引用的外层变量 称之为闭包
-
应用场景
外层函数,根据不同参数,来生成不同作用功能的函数
-
注意事项
- 闭包中,如果要修改引用的外层变量,需要使用nonlocal变量 声明 否则当做是闭包内,新定义的变量
- 当闭包内,引用了一个,后期会发生变化的变量时。函数只有被调用的时候,函数内部的值才会被确定,
#闭包举例 标准格式
def test():a = 10def test2():print(a)return test2newFunc = test()
newFunc()#输出 10#闭包注意事项一 nonlocal声明
def test():num = 10def test2():#nonlocal num要加这个num = 666print(num)return test2newFunc = test()
newFunc()#输出 666 因为没有加nonlocal声明成全局变量 #闭包注意事项二
def test():num = 10def test2():print(num)num = 11return test2newFunc = test()
newFunc()#输出 11 此时程序是先走num = 10,然后是num = 11,函数test2()没有被调用所有不执行,当走到newFunc()时,test2()函数才被调用def test():funcs = []for i in range(1,4)def test2():print(i)funcs.append(test2)return funcs
newFunc = test()
newFunc[0]()#3
newFunc[1]()#3
newFunc[2]()#3
#当循环在进行的时候,输出语句中的i是一个标识符没有具体的值,当调用函数时 i = 3 所有输出的都是3 而不是1 2 3 #如果想要输出 1 2 3 就要每遍历一次函数调用一次
def test():funcs = []for i in range(1,4):def test2(num):def inner():print(num)return innerfuncs.append(test2(i))return funcs
newFunc = test()
newFunc[0]()#3
newFunc[1]()#3
newFunc[2]()#3
相关文章:
【python 基础篇 十一】python的函数-------函数的偏函数 高阶函数 返回函数 匿名函数 闭包
目录1.偏函数2.高阶函数3.返回函数4.匿名函数5.闭包1.偏函数 概念 当我们写一个参数比较多的函数时,如果有些参数,大部分场景下都是某一个固定值,那么为了简化使用,就可以创建一个新函数,指定我们要使用的函数的某个…...

妇女节到了,祝福所有女神 Happy Women‘s Day!
在每年3月8日人们庆祝妇女节 Womens Day is cllebrated on March 8 every year.国际妇女节(IWD),中国内地称“三八”国际劳动妇女节或国际劳动妇女节。是在每年的3月8日为庆祝妇女在经济、政治和社会等领域作出的重要贡献和取得的…...

etcd集群通过 Leader 写入数据,为什么K8s HA集群中讲每个 kube-apiserver 只和本机的 ETCD 通信
写在前面 对这个我不太明白,所有在 stackOverflow 的请教了大佬这里分享给小伙伴理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整…...

HTML 表单
HTML 表单和输入 HTML 表单用于收集不同类型的用户输入。 在线实例 创建文本字段 (Text field) 本例演示如何在 HTML 页面创建文本域。用户可以在文本域中写入文本。 创建密码字段 本例演示如何创建 HTML 的密码域。 (在本页底端可以找到更多实例。) …...

HTML、CSS学习笔记5(移动端基础知识、Flex布局)
一、移动端基础知识 1.PC端和移动端区别 移动端:手机版网页,手机屏幕小,网页宽度多数为100%,没有版心 PC端:电脑版网页,屏幕大,网页固定版心 PC端和移动端不是同一个网页 2.如何在电脑里面…...

【Java学习笔记】2.Java 开发环境配置
Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境。 window系统安装java 下载JDK 首先我们需要下载 java 开发工具包 JDK,下载地址:https://www.oracle.com/java/technologies/downloads/,在下载页面中根据自己的系统选…...

MyBatis——进阶操作(2)
标签 if标签 当提交的表单中有些为非必填项,用户并没有上传这些属性的值,那么程序可以上传NUll,也可以用if标签判断用户有没有上传这个值 <if test"参数!null">操作 </if>其中test中填写一条语句,如果得…...
循环结构
循环结构循环结构一、课前问答二、while循环三、do-while循环四、for循环五、流程控制5.1 break5.2 continue循环结构 一、课前问答 1、switch支持的数据类型。 2、switch中break的作用。 3、多重if如果多个条件都成立,执行方式。 二、while循环 语法: …...

漫谈数据库表设计及索引设计
一.数据库表设计 在数据库表设计上有个很重要的设计准则,称为范式设计。 什么是范式设计? 范式来自英文Normal Form,简称NF。MySQL是关系型数据库,但是要想设计—个好的关系,必须使关系满足一定的约束条件,…...

【JavaWeb】CSS基础知识:引入方式 + 选择器
CSS引入 CSS的引入有三种,三种的优缺点各不相同。 行内样式表 <!-- 行内样式表 --><!-- 相当于标签的一个属性 --><!-- 只对当前标签生效 --><!-- 优先级较高,会覆盖其他样式 --><p style"color: blue;">这是…...

02-前端-javaScript
文章目录JavaScript1,JavaScript简介2,JavaScript引入方式2.1 内部脚本2.2 外部脚本3,JavaScript基础语法3.1 书写语法3.2 输出语句3.3 变量3.3.1 全局变量var3.3.2 局部变量let3.3.3 常量const3.4 数据类型3.5 运算符3.5.1 \和区别 ▲3.5.2 …...
对链表学习的总结一
一,单链表结构定义 C/C++ 数组:一组具有相同类型数据的集合。结构体:不同类型数据的集合。 // Definition for singly-linked list. struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next...
toSring()还有个高级用法好用
Object.prototype.toString()能够很好的判断数据的类型及内置对象 typeof xxx:能判断出number,string,undefined,boolean,object,function(null是object)Object.prototype.toString.call(xxx):能判断出大部分类型Array.isArray(xxx):判断是否为数组var test= Object.…...

Linux--多线程(3)
目录1. POSIX信号量1.1 概念2. 基于环形队列的生产消费者模型2.1 环形队列的基本原理2.2 基本实现思想3. 多生产多消费1. POSIX信号量 1.1 概念 信号量本质是一个计数器,申请了信号量以后,可以达到预定临界资源的效果。 POSIX信号量和SystemV信号量相同…...

【spring】事务
概述 1、什么事务 事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操 作都失败 2、事务四个特性(ACID) (1)原子性 (2)一致性 (3…...

博通仍然是美股市场最好的芯片半导体股
来源:猛兽财经 作者:猛兽财经 博通(AVGO)是一家快速增长的半导体公司,并且有很高的股息分红,目前其股息收益率已经高出了平均水平3.2%,而且估值非常合理,仅为预期净利润的14倍。 虽然博通也受到了经济衰退影…...
java开发手册之异常日志
文章目录异常日志异常处理日志规约异常日志 异常处理 1.Java 类库中定义的一类 RuntimeException可以通过预先检查进行规避,而不应该通过 catch 来处理 比如:IndexOutOfBoundsException,NullPointerException 等等。 说明:无法通…...
P6专题:关于P6 EPPM和PPM的区别及选型
目录 引言 什么是 Primavera P6 项目管理? Primavera P6 PPM 关键点 Primavera P6 PPM 是独立工具还是企业工具? 什么是 Primavera P6 企业项目组合管理? 那么EPPM的windows-tool呢? P6 EPPM 适合谁? 更多对比…...

亿万级海量数据去重软方法
文章目录原理案例一需求:方法案例二需求:方法:参考原理 在大数据分布式计算框架生态下,提升计算效率的方法是尽可能的把计算分布式话、并行化,避免单节点计算过载,把计算分摊到各个节点。这样解释小白能够…...

记录--手摸手带你撸一个拖拽效果
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 最近看见一个拖拽效果的视频(抖音:艾恩小灰灰),看好多人评论说跟着敲也没效果,还有就是作者也不回复大家提出的一些疑问,本着知其然必要知其所以然…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...