Python 中的 lambda 函数和嵌套函数

news2025/1/2 22:15:39

Python 中的 lambda 函数和嵌套函数

  • Python 中的 lambda 函数和嵌套函数
    • Python 中的 lambda 函数
    • 嵌套函数(内部函数)
      • 封装
      • 辅助函数
      • 闭包和工厂函数

Python 中的 lambda 函数和嵌套函数

Python 中的 lambda 函数

Lambda 函数是基于单行表达式的匿名函数。就像用def关键字定义常规函数一样,lambda关键字用于定义匿名函数。Lambda函数仅限于单行。这意味着它们不能使用多个语句,也不能使用return语句。在计算完单行表达式后,返回值会自动返回。

lambda函数可以在任何使用常规函数的地方使用。lambda函数最简单、最方便的用法是与mapreducefilter函数一起使用。当希望使代码更简洁时,Lambda函数很有帮助。

之前我们讨论过mapfilter,现在我们重用之前的代码,演示一下定义和使用 lambda 函数。请参考下面的代码:

myList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

new_list = list(map(lambda x: x * x, myList))
print(new_list)

new_list = list(filter(lambda x: x % 2 == 0, myList))
print(new_list)

以上代码的输出结果是:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[2, 4, 6, 8, 10]

尽管代码变得更加简洁了,但是 lambda 表达式是不能复用的,并且也不容易维护。这和其它编程语言,比如 C++ 中的 lambda 表达式有很大不同。在 C++ 里,lambda 表达式可以实现任意复杂的功能。在 Python 中,只有当实现的功能非常简单时,使用 lambda 函数比较合适。不过,Python 中的嵌套函数很强大,建议使用。

嵌套函数(内部函数)

当我们在现有函数中添加一个函数时,它被称为内部函数或嵌套函数。使用内部函数的好处是,它们可以直接访问外部函数作用域中已定义或可用的变量。创建内部函数与使用def关键字并进行适当缩进来定义常规函数相同。内部函数不能被外部程序执行或调用。但是,如果外部函数返回内部函数的引用,则调用者可以使用它来执行内部函数。

内部函数有很多优点,应用很广泛。接下来举几个例子。

封装

内部函数的一个常见用例是对外部世界隐藏其功能。内部函数只在外部函数作用域中可用,对全局作用域中不可见。下面的代码示例展示了一个隐藏内部函数的外部函数:

def outer_hello():
    print("这是外部函数")
    def inner_hello():
        print("这是内部函数")
    inner_hello()
outer_hello()

在外部函数所在的作用域内,只能调用外部函数。内部函数只能在外部函数的作用域内调用。以上代码的输出结果是:

这是外部函数
这是内部函数

辅助函数

在某些情况下,我们会发现函数中的部分代码可以复用,那么我们就会把这部分代码封装成一个单独的函数。如果可复用代码仅仅是在函数内部可复用,那么我们可以把可复用代码封装成内部函数。这种类型的内部函数也被称为辅助函数。下面就是一个辅助函数的例子:

def outer_fn(x, y):
    def get_prefix(s):
        return s[:2]

    x2 = get_prefix(x)
    y2 = get_prefix(y)
    print(x2, y2)

outer_fn("abcd", "美丽新世界")

上面的outer_fn 中定义的辅助函数 get_prefix,被复用了 2 次。这段代码的输出结果是:

ab 美丽

闭包和工厂函数

这是一个内部函数的亮点应用场景。内部函数和其外围环境在一起,称作闭包,是动态创建的函数,可以被另一个函数当成返回值返回。闭包的真正神奇之处在于,被返回的函数(闭包)可以完全访问创建它时的变量和命名空间。即使外层函数已经执行完毕,也不影响闭包的正常执行,和对变量和命名空间的访问。

闭包的概念可以用下面的代码演示。在下面的代码中,我们展示了如何创建一个函数工厂,并且从函数工厂中返回一个闭包:

def power_calc_factory(base):
    def power_calc(exponent):
        return base**exponent
    return power_calc

power_calc_2 = power_calc_factory(2)
power_calc_3 = power_calc_factory(3)

print(power_calc_2(2))
print(power_calc_2(3))
print(power_calc_3(2))
print(power_calc_3(4))

在上面的代码中,power_calc_factory 扮演了一个函数工厂,每一次调用它,就会返回一个闭包。power_calc 是一个内部函数,它可以访问外部函数的变量 basepower_calc 的参数 exponent 是在它被调用时作为实参传递进来的。return power_calc 这一语句,把 power_calc 当作闭包返回了。

上面的代码的输出结果是:

4
8
9
81

<完>

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

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

相关文章

Unity URP多光源支持,多光源阴影投射,多光源阴影接收(优化版)

目录 前言&#xff1a; 一、属性 二、SubShader 三、ForwardLitPass 定义Tags 声明变体 声明变量 定义结构体 顶点Shader 片元Shader 四、全代码 四、添加官方的LitShader代码 五、全代码 六、效果图 七、结语 前言&#xff1a; 哈喽啊&#xff0c;我又来啦。这…

8086汇编(16位汇编)学习笔记09.宏汇编

8086汇编(16位汇编)学习笔记09.宏汇编-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 宏汇编在文件中是当做关键字的,但是在bug中运行时并没有这些指令,这些关键词被称为伪指令,cpu并不认识他们,需要经过编译器转化成 cpu认识的代码,但是他多我们写代码帮助又…

leetcode 面试经典 150 题:矩阵置零

链接矩阵置零题序号73题型二维数组解题方法标记数组法难度中等熟练度✅✅✅✅ 题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1]…

五、CentOS7/CentOS8安装APISIX(1)

目录 &#x1f33b;&#x1f33b; 一、 Apache APISIX介绍1.1 什么是Apache APISIX1.2 APISIX架构1.3 Apache APISIX 的技术优势1.4 APISIX‌应用场景 二、APISIX快速开始2.1 centos7/centos8安装APISIX 一、 Apache APISIX介绍 1.1 什么是Apache APISIX Apache APISIX 是一个…

BUG分析 - 重启有时失败

1. 倒查版本 1.0_11 - ok1.0_12 - fail 2.对比1.0_11和1.0_12 失败时的日志 ================================== 1.0_11 ============================== 2024-12-26 09:46:51.886 INFO [26332] [ThreadPLCPool::in

Ngnix介绍、安装、实战及用法!!!

一、Nginx简介 1、Nginx概述 Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数 。 2、正向代理 正向代理&#xff1a;如果把局…

【物联网】给EoRa Pi 烧录Meshtastic

文章目录 一、Meshtastic 是什么&#xff1f;二、Meshtastic 烧录过程1. 在线烧录工具2. 刷机进度 总结 一、Meshtastic 是什么&#xff1f; Meshtastic 是一种基于 LoRa 技术的离网通信平台。它通过低成本、低功耗的无线电设备&#xff0c;实现远距离自组网通信。可在脱离现有…

Java 中的各种锁

​ Java 中我们经常听到各种锁&#xff0c;例如悲观锁&#xff0c;乐观锁&#xff0c;自旋锁等等。今天我们将 Java 中的所有锁放到一起比较一下&#xff0c;并分析各自锁的特点&#xff0c;让大家能够快捷的理解相关知识。 1、悲观锁 VS 乐观锁 从概念上来说 悲观锁: ​ 在…

【开源免费】基于SpringBoot+Vue.JS租房管理系统(JAVA毕业设计)

本文项目编号 T 102 &#xff0c;文末自助获取源码 \color{red}{T102&#xff0c;文末自助获取源码} T102&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

报考重庆大学计算机研究生有哪些要求?

想要报考重庆大学计算机研究生&#xff0c;首要你要确定考专硕还是学硕&#xff0c;考什么内容&#xff0c;需要买什么书&#xff1f;以及考研期间一些信息获取渠道等。下面C哥将对以上问题进行详细解答。 1.报考条件&#xff1a; 报考重大计算机研究生与重大其他大多数专业条…

爬虫与反爬虫实现全流程

我选取的网页爬取的是ppt nba版 需要的工具:pycharm,浏览器 爬虫需要观察它的网页信息,然后开始首先爬取它的html,可以看到有人气,标题,日期,咨询 可以看到用get方法 import requests url"https://img-home.csdnimg.cn/images/20230724024159.png?origin_urlhttps%3A%2…

Llama 3 后训练(三)

目录 4. 后训练 4.1 建模 图表解读 4.1.1 聊天对话格式 4.1.2 奖励建模 4.1.3 监督微调&#xff08;Supervised Finetuning&#xff09; 4.1.4 直接偏好优化&#xff08;Direct Preference Optimization&#xff09; 4.1.5 模型平均&#xff08;Model Averaging&#x…

小程序配置文件 —— 15 页面配置

页面配置 小程序的页面配置&#xff0c;也称为局部配置&#xff0c;每一个小程序页面也可以使用自己的 .json 文件来对页面的窗口表现进行配置&#xff1b; 需要注意的是&#xff1a;页面配置文件的属性和全局配置文件中的 window 属性几乎一致&#xff0c;只不过这里不需要额…

【设计与实现】基于Bootstrap的地方旅游管理系统的设计与实现

目录 第一章 绪论 1.1 研究现状 1.2 设计原则 1.3 研究内容 第四章 系统设计 4.1系统结构设计 4.2系统顺序图设计 4.3数据库设计 第五章 系统实现 5.1登录模块的实现 第一章 绪论 1.1 研究现状 时代的发展&#xff0c;我们迎来了数字化信息时代&#xff0c;它正在渐…

如何使用React,透传各类组件能力/属性?

在23年的时候&#xff0c;我主要使用的框架还是Vue&#xff0c;当时写了一篇“如何二次封装一个Vue3组件库&#xff1f;”的文章&#xff0c;里面涉及了一些如何使用Vue透传组件能力的方法。在我24年接触React之后&#xff0c;我发现这种扩展组件能力的方式有一个专门的术语&am…

使用Excel制作通达信自定义“序列数据“

序列数据的视频教程演示 Excel制作通达信自定义序列数据 1.序列数据的制作方法&#xff1a;删掉没有用的数据&#xff08;行与列&#xff09;和股代码格式处理&#xff0c;是和外部数据的制作方法是相同&#xff0c;自己上面看历史博文。只需要判断一下&#xff0c;股代码跟随的…

VuePress搭建个人博客

VuePress搭建个人博客 官网地址: https://v2.vuepress.vuejs.org/zh/ 相关链接: https://theme-hope.vuejs.press/zh/get-started/ 快速上手 pnpm create vuepress vuepress-starter# 选择简体中文、pnpm等, 具体如下 .../19347d7670a-1fd8 | 69 .../19…

《机器学习》从入门到实战——线性回归

目录 一、什么是线性回归 二、一元线性回归模型 三、多元线性回归模型 四、误差项分析 1、误差项是否可以忽略 2、误差项的特点 3、误差项满足高斯分布&#xff08;正太分布&#xff09; &#xff08;1&#xff09;、高斯分布公式 &#xff08;2&#xff09;、公式推导 …

Java - 日志体系_Apache Commons Logging(JCL)日志接口库_适配Log4j2 及 源码分析

文章目录 PreApache CommonsApache Commons ProperLogging &#xff08;Apache Commons Logging &#xff09; JCL 集成Log4j2添加 Maven 依赖配置 Log4j2验证集成 源码分析1. Log4j-jcl 的背景2. log4j-jcl 的工作原理2.1 替换默认的 LogFactoryImpl2.2 LogFactoryImpl 的实现…

brupsuite的基础用法常用模块(1)

proxy模块&#xff1a; Options: 设置代理端口&#xff0c;默认为8080端口&#xff0c;若8080端口被占用可在该界面更改代理端口. HTTP history: 拦截的历史请求&#xff0c;右键可做更多操作&#xff0c;很多操作与其他模块有关。&#xff08;清除历史的话右键选择clear p…