当前位置: 首页 > 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;本着知其然必要知其所以然…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

Vue 实例的数据对象详解

Vue 实例的数据对象详解 在 Vue 中,数据对象是响应式系统的核心,也是组件状态的载体。理解数据对象的原理和使用方式是成为 Vue 专家的关键一步。我将从多个维度深入剖析 Vue 实例的数据对象。 一、数据对象的定义方式 1. Options API 中的定义 在 Options API 中,使用 …...