5.5 python函数式编程之--返回函数、匿名函数、偏函数(暂时稍微了解即可)

news2024/11/26 0:32:48
 1、    先回归历史:什么是函数
          函数就是通过将局部【目标】实现并封装起来, 后续可直接拿来用
 2、   函数式编程:  是把运算过程尽量写成一系列嵌套的函数调用

一、返回函数

     返回函数: 函数作为返回值
     闭包: 函数内部定义函数, 我们叫做内部函数, 内部函数可以引用外部函数的参数/局部变量, 当调用外部函数返回的是哪部函数时, 参数/变量都保存在返回的函数中,这种就叫做【闭包】
     案例: 相加一堆数字,计算出最终结果
     [关键字] 闭包
list1 = list(range(0, 10))
list2 = list(range(0, 20))


# 1、 普通实现
def calc_sum(*args):
    sum = 0
    for one in args:
        sum = sum + one
    return sum


# 2、返回函数
def return_sum(*args):
    def sum():
        sum_total = 0
        for one in args:
            sum_total = sum_total + one
        return sum_total

    return sum


a = return_sum(*list1)
b = return_sum(*list1)
print(a == b)
print(a)
print(a())

在这里插入图片描述

调用外部函数时,每次调用都是一个新的函数,故而:如果传入相同参数, 会发现相互不影响
对与闭包函数使用, 调用外部函数时,其实并没有执行,直到调用了内部函数才会执行
【特别注意】
1、 闭包时:尽量避免在返回函数中引用可变化的变量
2、 内层函数引用外层函数局部变量,如果未赋值可正常执行 ----如图2案例
3、 内层函数引用外部函数且对外层变量重新赋值,会报错—见图3
但是如果想要正常运行, 可以增加nonlocal声明变量非当前内部函数局部变量,具体见图4

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、 匿名函数lambda

 此处用法不再详细赘述,可参考上一节《5.4 python内置高阶函数之--map、reduce、filter、sorted》中map用法中关于lambda的使用说明,如有疑问,可评论或私聊再学习

三、 偏函数

 1、 【什么是偏函数】
        偏函数就是对之前的使用到的函数进行包装,将现在存在的函数的一些参数存到指定值中,最后得到一个新的函数
  2、【偏函数的作用】
  就是把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
  3、 【基本语法】from functools import partial
        偏函数名 = partial(func, *args, **kwargs)
def get_div(m, n):
    return m % n == 0


def get_div2(m, n, c):
    return m * n % c == 0


from functools import partial

div_1 = partial(get_div, n=3)
print(div_1(100))
print(div_1(96))

div_2 = partial(get_div2, c=3)
print(div_2(4, 6))
print(div_2(7, 5))

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OJ练习第138题——树中距离之和

树中距离之和 力扣链接:834. 树中距离之和 题目描述 给定一个无向、连通的树。树中有 n 个标记为 0…n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges , edges[i] [ai, bi]表示树中的节点 ai 和 bi 之间有一条边。 返回长度为 n 的数组 answe…

Vue项目搭建过程

Vue项目搭建过程 1、安装NodeJs 1.1 下载安装包 在 http://nodejs.cn/download/ 上下载64位安装包,然后进行安装,和普通软件的安装一样。 C:\Users\Administrator>node -v v16.13.1C:\Users\Administrator>npm -v 8.5.51.2 安装cnpm # 安装cn…

什么是「推荐系统」,有哪些主要的推荐方法?

1 什么是推荐系统 什么是推荐系统?根据维基百科的定义, 它是一种信息过滤系统,主要功能是预测用户对物品 的评分和偏好。这一定义回答了推荐系统的功能是过滤信息、连接用户和推送信息。将这一定义扩 展一下, 推荐系统就是自动联…

文献阅读:MathPrompter: Mathematical Reasoning using Large Language Models

文献阅读:MathPrompter: Mathematical Reasoning using Large Language Models 1. 内容简介2. 方法细节3. 实验内容4. 结论&思考 文献链接:https://arxiv.org/abs/2303.05398 1. 内容简介 这篇文章是今年3月份的时候微软提出的一篇工作&#xff0…

SpringBoot中间件—ORM(Mybatis)框架实现

目录 定义 需求背景 方案设计 代码展示 UML图 实现细节 测试验证 总结 定义: ORM:Object Relational Mapping --> 对象关系映射,是一种程序设计技术,用于实现面向对象编程语言里面不同类型系统的数据之间的转换 需求背…

前端|CSS(一)| pink老师

参考视频:黑马程序员前端CSS3基础教程,前端必备基础 目录 📚CSS引入 🐇引入CSS样式表 📚CSS基础选择器 🐇标签选择器 🐇类选择器(最常用) 🐇id选择器 …

VIM文本如何复制到系统剪切板?

今天从vim上用鼠标复制代码,发现把VIM当中的行号也复制进去了,就很麻烦,于是简单研究了下,如果vim支持clipboard的话就比较好办,具体支持与否,使用命令查看: vim --version | grep "clipb…

C语言指针面试题

C语言指针面试题 一.指针和数组1.一维数组2.字符数组3.二维数组 二.指针 一.指针和数组 1.一维数组 int a[] {1,2,3,4};(1)printf("%d\n",sizeof(a));// 16(2)printf("%d\n",sizeof(a0));// 4/8(3)printf("%d\n",sizeof(*a));// 4(4)printf(&…

xred病毒分析

概述 xred病毒是一种感染型病毒,会感染系统中特定目录下的exe和xlsx文件,该病毒会将自身伪装成Synaptics触摸板驱动程序,使用Dephi编写。 样本的基本信息 Verified: Unsigned Link date: 6:22 1992/6/20 Company: Synaptics Description: S…

vue3 前端编码规范

prettier 配置 1. vscode 安装prettier 的 插件 2. 新建 .prettierrc 文件 {"semi": false, // 不尾随分号"singleQuote": true, // 使用单引号"trailingComma": "none" // 多行逗号分隔的语法,最后一行不加逗号 }eslin…

WPF嵌入外部exe应用程序-实现基本的嵌入

WPF嵌入外部exe应用程序 使用场景功能实现嵌入基本功能实现1.导入windows API2.运行外部程序3. 获取窗体句柄4. 嵌入窗体5.设置子窗体位置整个代码 嵌入存在的问题: 使用场景 在WPF桌面应用程序开发过程中,有时候需要将其他程序结合到一起,让…

Linux尖刀——shell

目录 知识点 lsblk grep awk tail du df 对新增存储设备的检测与分区 用lsblk查询块设备 用dmesg看内核打印信息 用ls查看新增设备 对rootfs空间使用情况的监控 知识点 首先想要用shell脚本解决一些问题肯定要熟悉linux的命令 lsblk -t或–tree:以…

Redis进阶底层原理- 缓冲区

Redis中使用了很多缓冲区,在redis各个环节起到了非常核心的作用。下面来一一介绍一下: 输入输出缓冲区(客户端缓冲区) Redis中的输入输出缓冲区是为了平衡客户端发送命令和服务端处理命令的速度差异,如果客户端发送指…

java用 postman输入 数字 会加上单引号 和逗号,方便查询

java用 postman输入 数字 会加上单引号 和逗号,方便查询 /*** 输入12575726* 891006* 12575726* 891006* 返回* 12575726,* 891006,* 12575726,* 891006* 方便查询数据* param data* return*/RequestMapping(value "l…

MySQL查看系统性能参数、统计SQL的查询成本last_query_cost的使用

1、查看MySQL系统性能参数 在MySQL中,可以使用SHOW STATUS语句查询一些MySQL数据库服务器的性能参数、执行频率。 语法如下: SHOW [ GLOBAL | SESSION] STATUS LIKE 参数; 一些常用的性能参数如下: Connections:连接MySQL服…

《银行法律法规》三、银行管理——2、公司治理、 内部控制与合规管理

第二章 公司治理、 内部控制与合规管理 第一节 公司治理 考点1 银行公司治理概述★★ 商业银行公司治理是指股东大会、 董事会、 监事会、 高级管理层、 股东及其他利益相关者之间的相互关系, 包括组织架构、 职责边界、 履职要求等治理制衡机制, 以…

从零到精通!50个必懂IT术语,让你成为行业翘楚!

您刚进入IT行业?不必惊慌!我们为您整理了50个最常见的IT术语,从ICT到ITIL再到SLM,全方位解读,让您快速掌握这些关键概念。更令人兴奋的是,我们将向您介绍轻易云数据集成平台,它是您在数字化转型…

Redis进阶底层原理 - 分区算法方案

Redis分区是指将数据分散到不同的Redis实例,降低单个Redis实例内存和高并发请求的压力。为什么要做分区:目前来说前面所学知识都是基于Redis单实例上进行的,及时是哨兵模式也只是保证了单个Redis实例的可用性。当内存数据越来越多时单个Redis…

BOM编程

十四、BOM和DOM编程 windows对象 常见方法 _self:在当前页面打开窗口 _blank:打开一个新的选项卡 第一个参数是x轴,一般没有横向滚动条,都是操作第二个参数 history对象 属性:一般用不到 方法: 01.histor…

PCB规则设置

PCB设计规则 网络class设置间距规则设置线宽规则过孔规则设置铺铜规则设置其他规则设置 网络class设置 间距规则设置 进入规则设置 线宽规则 新建线宽选项,电源类 过孔规则设置 铺铜规则设置 其他规则设置