Python 中的 lambda 函数和嵌套函数
Python 中的 lambda 函数和嵌套函数
- Python 中的 lambda 函数和嵌套函数
- Python 中的 lambda 函数
- 嵌套函数(内部函数)
- 封装
- 辅助函数
- 闭包和工厂函数
Python 中的 lambda 函数和嵌套函数
Python 中的 lambda 函数
Lambda 函数是基于单行表达式的匿名函数。就像用def
关键字定义常规函数一样,lambda
关键字用于定义匿名函数。Lambda函数仅限于单行。这意味着它们不能使用多个语句,也不能使用return
语句。在计算完单行表达式后,返回值会自动返回。
lambda函数可以在任何使用常规函数的地方使用。lambda函数最简单、最方便的用法是与map
、reduce
和filter
函数一起使用。当希望使代码更简洁时,Lambda函数很有帮助。
之前我们讨论过map
、filter
,现在我们重用之前的代码,演示一下定义和使用 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**exponentreturn power_calcpower_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
是一个内部函数,它可以访问外部函数的变量 base
。power_calc
的参数 exponent
是在它被调用时作为实参传递进来的。return power_calc
这一语句,把 power_calc
当作闭包返回了。
上面的代码的输出结果是:
4
8
9
81
<完>
相关文章:
Python 中的 lambda 函数和嵌套函数
Python 中的 lambda 函数和嵌套函数 Python 中的 lambda 函数和嵌套函数Python 中的 lambda 函数嵌套函数(内部函数)封装辅助函数闭包和工厂函数 Python 中的 lambda 函数和嵌套函数 Python 中的 lambda 函数 Lambda 函数是基于单行表达式的匿名函数。…...
语言模型评价指标
1. BLEU(Bilingual Evaluation Understudy) 目标:衡量生成文本和参考文本之间的词汇相似性。 计算步骤: N-gram 匹配: 将生成文本和参考文本分解成 1-gram、2-gram、…、N-gram(通常取到 4-gramÿ…...

工程师 - MSYS2介绍
https://www.msys2.org/ MSYS2 是一系列工具和库,为您提供了一个易于使用的环境,用于构建、安装和运行本地 Windows 软件。 MSYS2 is a collection of tools and libraries providing you with an easy-to-use environment for building, installing an…...

算法基础三:插入排序
定义 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用…...

小米汽车加速出海,官网建设引领海外市场布局!
面对国内市场的饱和态势,中国企业出海步伐纷纷加速,小米也是其中的一员。Canalys数据显示,2024年第三季度,小米以13.8%的市场份额占比,实现了连续17个季度位居全球前三的成绩。 据“36 氪汽车”报道,小米汽…...

Python Polars快速入门指南:LazyFrames
前文已经介绍了Polars的Dataframe, Contexts 和 Expressions,本文继续介绍Polars的惰性API。惰性API是该库最强大的功能之一,使用惰性API可以设定一系列操作,而无需立即运行它们。相反,这些操作被保存为计算图,只在必要…...

什么是网络安全(Cybersecurity)?
不同组织机构对网络安全(Cybersecurity或Cyber Security)的定义不尽相同。从目标上来说,网络安全主要用于保护网络、计算机、移动设备、应用程序及数据等资产免受网络攻击,避免造成数据泄露、业务中断等安全问题。 网络钓鱼、勒索…...

VBA批量插入图片到PPT,一页一图
Sub InsertPicturesIntoSlides()Dim pptApp As ObjectDim pptPres As ObjectDim pptSlide As ObjectDim strFolderPath As StringDim strFileName As StringDim i As Integer 设置图片文件夹路径strFolderPath "C:\您的图片文件夹路径\" 请替换为您的图片文件夹路径…...

Pandas-DataFrame入门
文章目录 一. Pandas DataFrame简介二. 加载数据集1. 目的2. 步骤① 导包② 加载csv③ 查看数据类型及属性④ Pandas与Python常用数据类型对照 三. 查看部分数据1. 根据列名加载部分列数据① 加载一列数据,通过df[列名]方式获取② 加载多列数据,通过df[[…...

爬虫 - 爬取王者荣耀所有皮肤图片
结果展示 安装 pip install requests logger代码 import json import os import re from concurrent.futures import ThreadPoolExecutorimport requests from loguru import loggerdef parse_url(url, bFalse):try:headers {"User-Agent": "Mozilla/5.0 (Wi…...

【畅购商城】购物车模块之查看购物车
目录 分析 接口 后端实现 前端实现:显示页面 前端实现:显示购物车信息 分析 用户如果没有登录,购物车存放在浏览器端的localStorage处,且以数组的方式进行存储。用户如果登录了,购物车存放在redis中,…...

Spring Boot 学习笔记
学习代码第一步:如何写 Hello world ? 1、新建项目 新建一个 Maven Java 工程,在 pom.xml 文件中添加 Spring Boot Maven 依赖: <parent><groupId>org.springframework.boot</groupId><artifactId>spri…...

快速打造智能应用:从设计到上线的全流程指南
随着人工智能技术的快速发展,如何将大模型技术转化为实际应用成为了各行业关注的焦点。本文将以一个经典的 RAG(检索增强生成)知识问答系统为例,详细介绍从智能体设计到最终应用部署的全流程。通过结合阿里云的魔笔低代码平台和丰…...
Java-将一个大列表均分成多个小列表,每个小列表包含10个元素
要将一个大列表均分成多个小列表,每个小列表包含10个元素,可以使用多种方法。以下是几种常 见的方法: 方法一:使用 subList 这是你已经提到的方法,通过 subList 来获取子列表。 import java.util.ArrayList; import java.util.List;public class BatchProcessingExamp…...
tcp_rcv_synsent_state_process函数
tcp_rcv_synsent_state_process 是 Linux Kernel 中用于处理 TCP 连接在 SYN-SENT 状态下接收到报文的函数。这个函数在 TCP 三次握手阶段起到了至关重要的作用,处理了在客户端发送 SYN 请求之后收到服务器响应报文的各种情况。 以下是这个函数的解读和剖析: int tcp_rcv_sy…...

关于无线AP信道调整的优化(锐捷)
目录 一、信道优化的基本原则二、2.4G频段信道优化三、5G频段信道优化四、信道优化代码具体示例五、其他优化措施 一、信道优化的基本原则 信道优化旨在减少信道间的干扰,提高网络覆盖范围和信号质量。基本原则包括: 1. 选择合适的信道:根据…...

C#编写的金鱼趣味小应用 - 开源研究系列文章
今天逛网,在GitHub中文网上发现一个源码,里面有这个金鱼小应用,于是就下载下来,根据自己的C#架构模板进行了更改,最终形成了这个例子。 1、 项目目录; 2、 源码介绍; 1) 初始化; 将样…...

计算机网络|数据流向剖析与分层模型详解
文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中,数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…...
某些iphone手机录音获取流stream延迟问题 以及 录音一次第二次不录音问题
一些型号的iphone手机录音获取流stream延迟问题 以及 录音一次第二次不录音问题 延迟问题 navigator.mediaDevices.getUserMedia({ audio: true }) .then((stream) > {console.log(stream) })从开始到获取stream会有将近2s的延迟 导致按下按钮开始录音 会有前…...

gazebo_world 基本围墙。
如何使用? 参考gazebo harmonic的官方教程。 本人使用harmonic的template,在里面进行修改就可以分流畅地使用下去。 以下是world 文件. <?xml version"1.0" ?> <!--Try sending commands:gz topic -t "/model/diff_drive/…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...