当前位置: 首页 > news >正文

【测试开发】函数进阶-纯函数、内置函数、匿名函数、偏函数

 一、纯函数

1、纯函数概念

一个函数的返回结果,只依赖于它的参数,并且在执行过程中没有副作用,此类函数叫纯函数

2、纯函数的原则

1、变量都只在函数作用域内获取,作为函数的参数传入

2、不会产生副作用(side effects),不会改变被传入的数据或者其他数据(全局变量)

3、相同的输入保证相同的输出

3、函数的副作用

副作用是指函数被调用,完成了函数既定的计算任务,但同时因为访问了外部数据,尤其是因为对外部数据进行了写操作,从而一定程度地改变了系统环境

4、举例代码

# 函数func1返回的结果为两个参数相加的结果
def func1(a, b):return a + b# 函数func2返回的结果为参数a和外部变量var1相加的结果
var1 = 100
def func2(a):reuturn var1+a

二、内置函数

1、map函数:会根据提供的函数对指定序列做映射

将返回值取出,根据返回值是true还是false,输出数据

将可迭代对象的数据拿出来,每一个元素都传入函数运行,将函数的返回值添加到新列表中,统一处理一批数据时,可用此函数

def fun(n):return n*2
li = [1,2,122,331,11,22,33,4,6,8]
res = map(fun, li)
print(list(res))

2、filter函数:函数用于过滤序列

def fun(n):return n<10
li = [1,2,122,331,11,22,33,4,6,8]
res = filter(fun, li) # 过滤作用,满足fun函数的过滤条件就输出
print(list(res))

3、zip函数:函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组

当列表长度不一时,取最短长度输出

res = zip([1,2,3],[11,22,33,44],[111,222,333])
print (list(res))

二、匿名函数lambda,适用场景:简单的函数定义,只有一个表达式

res = lambda a,b:a+b
print(res(11,22))

与filter同功能的写法

li = [1,2,122,331,11,22,33,4,6,8]
res = filter(lambda x:x<10, li)
print(list(res))

推导式写法

li = [(lambda x:x%5==0)(i) for i in range(10)]
print(li) #输出结果为True False

三、偏函数

当函数的参数个数太多,需要简化时,可以使用functools.partial创建一个新函数,此函数可以固定住原函数的部分参数,从而在调用时更简单

如filter,调用时传入2个参数,第一个函数,第二个是我们需要过滤的可迭代类型的数据

例题:

要获取如下各列表中数据中大于5的数据
li1 = [1,5,8,10,20]
li2 = [2,22,33,44]
li3 = [3,44,1,33,44,5]

写法一:直接使用 filter

# 要获取数据中大于5的数据
li1 = [1,5,8,10,20]
li2 = [2,22,33,44]
li3 = [3,44,1,33,44,5]# 写法1
res1 = filter(lambda x: x > 5, li1)
res2 = filter(lambda x: x > 5, li2)
res3 = filter(lambda x: x > 5, li3)
print(list(res1))
print(list(res2))
print(list(res3))

写法二 :自定义函数,在函数中调用filter

# 要获取数据中大于5的数据
li1 = [1,5,8,10,20]
li2 = [2,22,33,44]
li3 = [3,44,1,33,44,5]# 写法2
def filter2(iter):return filter(lambda x: x > 5, iter)
print(list(filter2(li1))) # 不加list返回的是filter迭代器
print(list(filter2(li2)))
print(type(filter2(li2)))

写法三:partial(filter, lambda 条件)

# 要获取数据中大于5的数据
li1 = [1,5,8,10,20]
li2 = [2,22,33,44]
li3 = [3,44,1,33,44,5]# 写法3
filter3 = partial(filter, lambda x: x > 5)
print(list(filter3(li1)))

四、三目运算符

a = 10
print(10) if a>10 else print(0)

http://www.xdnf.cn/news/1025695.html

相关文章:

  • 梨泛转录组-文献精读145
  • 基于sample_aiisp再创建一路 h264编码流,和jpg的编码流
  • BugKu Web渗透之秋名山车神
  • 高效解决Java内存泄漏问题:方法论与实践指南
  • 解决Avantage 6.0版本以上峰拟合 峰显示不全的问题
  • 2025最新版!Windows Python3 超详细安装图文教程(支持 Python3 全版本)
  • windows 电脑如何寻找 自己电脑上的 mac 地址
  • Linux cgroup 技术
  • 语法疫苗:SynCode如何为LLM生成装上“防崩溃引擎”
  • 学习笔记:Redis入门
  • 数学中 “熵“ 的奇妙世界
  • 【深入剖析】攻克 Java 并发的基石:Java 内存模型 (JMM) 原理与实践指南
  • R2S2:通过现实世界现成的技能空间释放人形机器人的潜力
  • 【考研数学:高数8】一元函数积分学的概念与性质
  • 基于Java+Swing实现餐厅点餐系统(含课程报告)
  • 【大模型推理】CTA与SM关系
  • 玩转计算机视觉——按照配置部署paddleOCR(英伟达环境与昇腾300IDUO环境)
  • Python 训练营打卡 Day 50
  • 网盘直链解析网页版
  • Java多线程:为什么wait()必须用循环而非if?
  • Python 学习路线图:从入门到精通的完整指南
  • 泰国电商系统简单纪要
  • atcoder [ABC271D] Flip and Adjust
  • 前端面经整理【2】
  • 【无标题】二维拓扑色动力学模型:数学物理基础与可行性论证
  • 窗口函数详解​
  • Jmeter调用jar包中的方法,并使用返回值当请求参数
  • 如何在Linux命令窗口中执行MySQL脚本
  • HarmonyOS 5 Cordova有哪些热门插件?
  • 【均价趋势副图指标】识别洗盘,拉升,最佳潜伏点,止盈防守跟踪操盘技术图文解说