当前位置: 首页 > news >正文

【python 基础篇 十一】python的函数-------函数的偏函数 高阶函数 返回函数 匿名函数 闭包

目录

      • 1.偏函数
      • 2.高阶函数
      • 3.返回函数
      • 4.匿名函数
      • 5.闭包

1.偏函数

  1. 概念

    ​ 当我们写一个参数比较多的函数时,如果有些参数,大部分场景下都是某一个固定值,那么为了简化使用,就可以创建一个新函数,指定我们要使用的函数的某个参数,为某个固定的值;这个新函数就是“偏函数”

  2. 语法

    • 方式一 自己写一个新的
    • 方式二 借助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.高阶函数

  1. 概念

    ​ 当一个函数A的参数,接收的是另一个函数时,则把这个函数A称为高阶函数

  2. 注意事项

    1. 函数也可向数据一样相互传递
#高阶函数举例  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.返回函数

  1. 概念

    ​ 是指一个函数内部,它返回的数据是另外一个函数,把这样的操作称为“返回函数”

# 举例 根据不同参数,返回不同函数
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.匿名函数

  1. 概念

    ​ 匿名函数也称为 “lambda函数”,是指没有名字的函数

  2. 语法

    • 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.闭包

  1. 概念

    在函数嵌套的前提下,

    内层函数,引用了外层函数的变量(包括参数)

    外层函数,又把内层函数,当做返回值进行返回

    这个内层函数+所引用的外层变量 称之为闭包

  2. 应用场景

    外层函数,根据不同参数,来生成不同作用功能的函数

  3. 注意事项

    • 闭包中,如果要修改引用的外层变量,需要使用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标签 当提交的表单中有些为非必填项&#xff0c;用户并没有上传这些属性的值&#xff0c;那么程序可以上传NUll&#xff0c;也可以用if标签判断用户有没有上传这个值 <if test"参数!null">操作 </if>其中test中填写一条语句&#xff0c;如果得…...

循环结构

循环结构循环结构一、课前问答二、while循环三、do-while循环四、for循环五、流程控制5.1 break5.2 continue循环结构 一、课前问答 1、switch支持的数据类型。 2、switch中break的作用。 3、多重if如果多个条件都成立&#xff0c;执行方式。 二、while循环 语法&#xff1a; …...

漫谈数据库表设计及索引设计

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

【JavaWeb】CSS基础知识:引入方式 + 选择器

CSS引入 CSS的引入有三种&#xff0c;三种的优缺点各不相同。 行内样式表 <!-- 行内样式表 --><!-- 相当于标签的一个属性 --><!-- 只对当前标签生效 --><!-- 优先级较高&#xff0c;会覆盖其他样式 --><p style"color: blue;">这是…...

02-前端-javaScript

文章目录JavaScript1&#xff0c;JavaScript简介2&#xff0c;JavaScript引入方式2.1 内部脚本2.2 外部脚本3&#xff0c;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 概念 信号量本质是一个计数器&#xff0c;申请了信号量以后&#xff0c;可以达到预定临界资源的效果。 POSIX信号量和SystemV信号量相同…...

【spring】事务

概述 1、什么事务 事务是数据库操作最基本单元&#xff0c;逻辑上一组操作&#xff0c;要么都成功&#xff0c;如果有一个失败所有操 作都失败 2、事务四个特性&#xff08;ACID&#xff09; &#xff08;1&#xff09;原子性 &#xff08;2&#xff09;一致性 &#xff08;3…...

博通仍然是美股市场最好的芯片半导体股

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 博通(AVGO)是一家快速增长的半导体公司&#xff0c;并且有很高的股息分红&#xff0c;目前其股息收益率已经高出了平均水平3.2%&#xff0c;而且估值非常合理&#xff0c;仅为预期净利润的14倍。 虽然博通也受到了经济衰退影…...

java开发手册之异常日志

文章目录异常日志异常处理日志规约异常日志 异常处理 1.Java 类库中定义的一类 RuntimeException可以通过预先检查进行规避&#xff0c;而不应该通过 catch 来处理 比如&#xff1a;IndexOutOfBoundsException&#xff0c;NullPointerException 等等。 说明&#xff1a;无法通…...

P6专题:关于P6 EPPM和PPM的区别及选型

目录 引言 什么是 Primavera P6 项目管理&#xff1f; Primavera P6 PPM 关键点 Primavera P6 PPM 是独立工具还是企业工具&#xff1f; 什么是 Primavera P6 企业项目组合管理&#xff1f; 那么EPPM的windows-tool呢&#xff1f; P6 EPPM 适合谁&#xff1f; 更多对比…...

亿万级海量数据去重软方法

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

记录--手摸手带你撸一个拖拽效果

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 最近看见一个拖拽效果的视频(抖音&#xff1a;艾恩小灰灰)&#xff0c;看好多人评论说跟着敲也没效果&#xff0c;还有就是作者也不回复大家提出的一些疑问&#xff0c;本着知其然必要知其所以然…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...