Python实战基础15-匿名函数,高阶函数

news2025/4/8 15:33:57

1、匿名函数

用lambda关键词能创建小型匿名函数,这种函数得名于省略了用def声明函数的标准步骤。

lambda函数的语法只包含一个语句,如下:

lambda 参数列表: 运算表达式

如下实例:

sum = lambda arg1,arg2:arg1 + arg2

#调用sum函数
print("Value of total : %d" % sum( 10, 20 ))
print("Value of total : %d" % sum( 20, 20 ))

以上实例输出结果:

lambda函数能接收任何数量的参数但只能返回一个表达式的值。 

匿名函数可以执行任意表达式(甚至print函数),但是一般认为表达式应该有一个计算结果供返回使用。

python在编写一些执行脚本的时候可以使用lambda,这样可以接受定义函数的过程,比如写一个简单的脚本管理服务器。

1.1 应用场合

1.1.1 函数作为参数传递

'''
匿名函数的使用场合:
匿名函数作为参数使用
'''
def test():
    print('_____test_____')

def func(a,f):
    print('----->',a)
    f()


func(5,test)

print('---------')

def func1(a,f): # f = lambda x : x**2
    print('++++>',a)
    r = f(a)
    print('====》',r)

func1(8,lambda x:x**2)

Python中使用函数作为参数的内置函数和类:

函数名或类名功能参数描述
sorted函数用来将一个无序列表进行排序

函数参数的返回值规定按照元素的哪个属性进行排序

filter类用来过滤一个列表里符合规定的所有元素,得到的结果是一个迭代器函数参数的返回值指定元素满足的过滤条件
map类将列表里的每一项数据都执行相同的操作,得到的结果是一个迭代器函数参数用来指定列表里元素所执行的操作
reduce函数对一个序列进行压缩运算,得到一个值。python3以后,这个方法被移到了functools模块函数参数用来指定元素按照哪种方式合并

1.2 sorted函数的使用 

'''
高阶函数
一个函数的参数是另一个函数,高阶函数
系统高阶函数:max  min  sorted
'''


m = max(5,9)
print(m)  # 9

m = max([2,4,67,8,9])
print(m)  # 67

# 找出最大值
list1 = [('tom',19),('tony',20),('lily',18),('daniel',21),('rose',22)]
m = max(list1,key=lambda x:x[1])
print(m)   # ('rose', 22)

# 找出最小值
mi = min(list1,key=lambda x:x[1])
print(mi)  # ('lily', 18)

# 排序,从小到大
s = sorted(list1,key=lambda x:x[1])   # x[1]表示按照年龄排序
print(s) # [('lily', 18), ('tom', 19), ('tony', 20), ('daniel', 21), ('rose', 22)]


# 从大到小
s = sorted(list1,key=lambda x:x[1],reverse=True)   # x[1]表示按照年龄排序
print(s) # [('rose', 22), ('daniel', 21), ('tony', 20), ('tom', 19), ('lily', 18)]

 1.3 filter

# 找出年龄大于20岁的
list1 = [('tom', 19), ('tony', 20), ('lily', 18), ('daniel', 21), ('rose', 22)]

# filter的匿名函数要求返回值必须是bool类型,只有bool类型结果为True的才是符合过滤条件的
rr = filter(lambda x: x[1] > 20, list1)  # 只有x[1]>20这一块的值返回的是true,才符合过滤要求

print(rr)  # <filter object at 0x000001B92C9B36C8>  # 得到的是一个filter object,得到的是一个迭代器的items
print(list(rr))  # [('daniel', 21), ('rose', 22)]  # 把它强转成list就可以看到结果了

1.4 map 

# 通过匿名函数指明提取的内容,并对内容进行加工,提取list1中符合条件的内容
list1 = [('tom', 19), ('tony', 20), ('lily', 18), ('daniel', 21), ('rose', 22)]
ma = map(lambda x:x[1],list1)
print(list(ma))  # [19, 20, 18, 21, 22]

# title首字母大写
ma = map(lambda x:x[0].title(),list1)
print(list(ma))  # ['Tom', 'Tony', 'Lily', 'Daniel', 'Rose']

# upper全部字母大写
ma = map(lambda x:x[0].upper(),list1)
print(list(ma)) # ['TOM', 'TONY', 'LILY', 'DANIEL', 'ROSE']

1.5 reduce函数 

from functools import reduce

r = reduce(lambda x,y : x+y,[1,2,3,4,5])
print(r)  # 15

2、高阶函数

在python中,函数其实也是一种数据类型。

def test():
    return 'hello world'
print(type(test)) # <class 'function'>

函数对应的数据类型是function,可以把它当做是一种复杂的数据类型。

既然同样都是一种数据类型,我们就可以把它当作数字或者字符串来处理。

2.1 定义一个变量指向函数

在python中,可以定义一个变量,让它来指向一个函数,相当于给函数起了一个别名。

def test():
    return 'hello wrold'

fun = test # 定义了一个变量fun,让它指向了test这个函数
print(fun()) # 使用fun()可以直接调用test这个函数

print(id(fun)) # 1798631154312
print(id(test)) # 1798631154312

注意:在定义一个变量表示一个函数时,函数后面不能加括号!加括号表示的是调用这个函数。

def test():
    return 'hello wrold'

result = test() # 这种写法是调用test函数,并把函数的返回值赋值给result变量
#print(result()) # 这里会报错 TypeError: 'str' object is not callable

fun = test # 这种写法是test函数起了一个别名,注意,这里的test后面不能加()
fun()      # 可以使用别名调用这个函数

高阶函数:既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,同样,我们还可以把一个函数当做另一个函数的返回值。这种函数的使用方式我们称之为高阶函数。

2.2 函数做为另一个函数的参数

def test(age,action):
    if age < 18:
        print('您还没满18岁,请退出')
    action() # 把参数action直接当做一个函数来调用

def smoke():
    print('我已经18岁了,我想喝酒')

my_action = smoke # 定义一个变量my_action,让它指向smoke函数
test(21,my_action) # 将my_action传给test函数作为它的参数

test(21,smoke) # 还可以不再定义一个新的变量,直接传入函数名

2.3 函数作为另一个函数的返回值

def test():
    print('我是test函数里输入的内容')

def demo():
    print('我是demo里输入的内容')
    return test  # test函数作为demo函数的返回值

result = demo() # 我是demo里输入的内容,调用demo函数,把demo函数的返回值赋值给result
print(type(result)) # <class 'function'> result的类型是一个函数

result() # 我是demo里输入的内容   我是test函数里输入的内容   既然result是一个函数,那么就可以直接使用()调用这个函数
demo()() # 我是demo里输入的内容   我是test函数里输入的内容

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

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

相关文章

Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial

未完待续。。。。。 5.1 基本操作 参考视频: 5 - 1 - Basic Operations (14 控制输出格式的长短 min).mkv 5.1.1 简单运算 不等于符号的写法是这个波浪线加上等于符号 ( ~ )&#xff0c;而不是等于感叹号加等号( ! ) 1 1 1   % 判断相等 2 1 ~ 2   % 判断不等 3 …

【AUTOSAR】Com通讯栈配置说明(一)---- Can模块

通讯栈 模块 项目通讯栈 主要包含如下几个模块&#xff1a; 各模块详细配置说明 Can模块 这部分最终会导入到EB 中&#xff0c;通过EB 生成CanDriver 代码&#xff0c; 具体参数的介绍已经在EB 配置说明中介绍过。 CanController ​​​​​​​CanHaredWareObject 以其中一…

Unity3D:2D/3D 项目

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 2D 还是 3D 项目 无论是创建 2D 还是 3D 游戏&#xff0c;Unity 都很拿手。在 Unity 中创建新项目时&#xff0c;可以选择以 2D 或 3D 模式启动。您可能已经知道要构建什么&#x…

1-网络初识——网络发展史

目录 1.独立模式 2.网络互联 2.1.局域网&#xff08;Local Area Network&#xff0c;简称LAN&#xff09; ①基于网线直连 ②基于集线器组建 ③基于交换机组建 ④基于交换机&#xff08;网口很多&#xff09;和路由器组建 2.2.广域网&#xff08;Wide Area Network&…

MySQL新身份验证插件caching_sha2_password

同事反馈了一个问题&#xff0c;MySQL客户端连接数据库的时候&#xff0c;提示这个错误&#xff0c; ERROR 2059 (HY000): Plugin caching_sha2_password could not be loaded: /usr/lib64/mariadb/plugin/caching_sha2_password.so: cannot open shared object file: No suc…

中国码农生存现状调查

传说中的码农到底是一种什么样的存在。 程序员一直都是一个备受人们关注的群体。据IDC统计&#xff0c;全球约有1850万名程序员&#xff0c;中国占10%。随着近年全国互联网创业热潮的兴起&#xff0c;“互联网”、“云计算”以及“智能硬件”等领域发展迅速&#xff0c;市场对…

微信小程序开发需要多少钱?

近几年来&#xff0c;微信小程序开发行业发展迅猛&#xff0c;可以说是未来的一个趋势&#xff0c;它不仅能在用户体验上更好&#xff0c;而且也能有效地提升商家的营业额。目前来说&#xff0c;小程序开发主要有模板小程序、定制小程序两种&#xff0c;模板小程序的价格比较低…

IO多路复用详解

文章目录 基本概念select系统调用详解select函数定义select的底层原理select的优缺点 poll系统调用详解poll函数定义调用poll的底层原理poll的优缺点 epoll系统调用详解epoll相关的函数定义epoll的底层原理epoll的优缺点 ET vs LT基本概念epoll_ctl模式设置 应用场景基于IO多路…

Makefile中定义版本号,巨坑

最初是这样定义的&#xff0c;咋看没问题 DT_VERSION 5.1.0 ifeq ($(shell which git), )DT_BACKEND_VERSION $(DT_VERSION) elseDATE $(shell date "%m/%d/%Y")GIT_VERSION $(shell git rev-parse HEAD | cut -c 1-8)DT_BACKEND_VERSION $(DT_VERSION)-$(GIT_…

基于 Log 的通用增量 Checkpoint

摘要&#xff1a;本文整理自阿里巴巴开发工程师&#xff0c;Apache Flink Contributor 俞航翔&#xff0c;在 Flink Forward Asia 2022 核心技术专场的分享。本篇内容主要分为四个部分&#xff1a; 1. Checkpoint 性能优化之路 2. Changelog 机制解析 3. Changelog 性能测试 4.…

使用Windows程序包管理器winget安装卸载更新软件

什么是 Windows 程序包管理器&#xff1f; Winget是一个命令行工具&#xff0c;是Windows 系统中用于自动安装、升级和配置软件的系统包管理工具。 Windows 程序包管理器是一个综合性的程序包管理器解决方案&#xff0c;它由一个命令行工具以及一组用于安装应用程序的服务组成…

缓存更新的四种策略及选取建议

文章目录 缓存更新的四种策略及选取建议前言Cache AsideCache Aside查询策略Cache Aside更新策略延迟双删 Read/Write ThroughRead/Write Through查询策略Read/Write Through更新策略 Write BehindRefresh-AheadCDC 四种策略的选择性能数据一致性冗余数据代码复杂度业务逻辑可靠…

高精度倾角传感器测量原理

高精度倾角传感器测量原理技术参数 1.性能参数 测量范围&#xff1a;0&#xff5e;30 测量精度&#xff1a;0.06 分 辨 率&#xff1a;0.0001 测量方向&#xff1a;X,Y 时间漂移&#xff1a;0.08/月 更新时间&#xff1a;30ms 上电启动时间&#xff1a;0.5s 2.电…

全网首发 | 广州虚拟动力最新版兼具动捕与面捕功能的动作捕捉系统

随着多项政策明确提出 未来将大力推进虚拟现实与文娱互动 影视艺术等新兴前沿领域的创新与产业化 动作捕捉作为联结虚实世界的桥梁 影响着3D动画以及文娱互动产业的数字化发展 行业痛点 •光学动捕系统成本昂贵&#xff1a;难以下沉到项目预算和运营预算&#xff0c;不利于…

CentOS 安装配置 vncserver

1. VNC 简介 VNC(Virtual Network Computing) 是使用网络建立连接的一个虚拟桌面&#xff0c;用来远程操作计算机的一种技术&#xff0c;日常会有很多中场景需要远程来控制和操作服务器等计算机。 2. CentOS 安装 VNC Server 使用 yum 安装 tigervnc-server。 sudo yum ins…

PG案例系列1:优化大表的count(*)

文章目录 一. 问题描述二. 解决方案2.1 收集统计信息2.2 并行2.3 autovacuum2.3 统计信息读取 参考: 一. 问题描述 前端页面需要分页展示&#xff0c;经常需要查询总数&#xff0c;然后做分页展示。 遇到的问题是&#xff0c;第一次执行会很慢&#xff0c;6秒左右&#xff0c…

C++数据结构:二叉树之一(数组存储)

文章目录 前言一、二叉树的基本定义二、二叉树的基本性质三、二叉树的存储&#xff08;数组&#xff09;总结原创文章&#xff0c;未经许可&#xff0c;禁止转载 前言 树是一种非线性数据结构&#xff0c;它由若干个节点和边组成。每个节点都有一个值&#xff0c;而边则表示节…

2核4G5M性能测评:腾讯云轻量应用服务器CPU内存带宽系统盘

腾讯云轻量应用服务器2核4G5M配置一年168元&#xff0c;三年628元&#xff0c;100%CPU性能&#xff0c;5M带宽下载速度640KB/秒&#xff0c;60GB SSD系统盘&#xff0c;月流量500GB&#xff0c;折合每天16.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的支付流量费&…

SuperMap iDesktopX扩展开发之GP算子扩展

作者&#xff1a;dongyx SuperMap iDesktopX是超图研究院推出的一款跨平台的桌面GIS软件&#xff0c;兼容Windows和Linux&#xff0c;同时iDesktopX也采用的是插件式扩展开发框架&#xff0c;支持定制开发。 使用iDesktopX定制开发有以下优势&#xff1a; ⚫ 采用 Swing 图形界…

第五十八天学习记录:C语言进阶:文件操作1

什么是文件 在程序设计中&#xff0c;一般有两种文件&#xff1a;程序文件、数据文件 程序文件 包括源程序文件&#xff08;后缀为.c&#xff09;&#xff0c;目标文件&#xff08;windows环境后缀为.obj&#xff09;&#xff0c;可执行程序&#xff08;windows环境后缀为.e…