Python基础——4高阶函数
高阶函数
函数本身可用变量指向,把变量当做函数参数的函数成为高阶函数
map and reduce
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现如下:
1 2 3 4 5 | >>> def f(x): ... return x * x ... >>> r = map (f, [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]) >>> list (r) |
[1, 4, 9, 16, 25, 36, 49, 64, 81]
map()传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。
再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
比方说对一个序列求和,就可以用reduce实现:
1 2 3 4 5 | >>> from functools import reduce >>> def add(x, y): ... return x + y ... >>> reduce (add, [ 1 , 3 , 5 , 7 , 9 ]) |
25
filter
根据函数的返回结果True or False对list等进行筛选,结果是一个Iterator
例:选出偶素
1 2 3 4 5 6 7 8 9 10 11 12 | def odd() n = 1 yield n n = n + 1 def chu() return lambda x : x % 2 > 0 # lambda关键字,匿名函数 def oushu() n = odd() while True : t = next (n) output = filter (chu,n) print ( list (output)) |
sorted
排序函数
L=[15,-5,6,-89,100]
sorted(L)
[-89,-5,6,15,100]
sorted(L,key=abs)
[-5,6,15,-89,100]
sorted(L,key=abs, reverse = True)
[100,-89,15,6,-5]
字符串排序是根据ASCLL码大小排序
返回函数
return 返回一个函数值
当把函数计算结果不是立即返回,在调用的时候返回,可用到返回函数。
返回函数里边不要有循环变量
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def count(): fs = [] for i in range ( 1 , 4 ): def f(): return i * i fs.append(f) return fs f1, f2, f3 = count() >>> f1() 9 >>> f2() 9 >>> f3() 9 |
如果用到循环变量,就把变量当做参数传进去:
1 2 3 4 5 6 7 8 9 | def count(): def f(j): def g(): return j * j return g fs = [] for i in range ( 1 , 4 ): fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f() return fs |
计数器函数:
1 2 3 4 5 6 7 | def createCounter : a = 0 def counter: nonlocal a #nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。 a = a + 1 return a return counter |
匿名函数
可以当做函数返回,可以用变量指向函数
1 2 3 | f = lambda x: x * x def lambda (x): return x * x |
装饰器(修饰函数)
修饰函数可以看做是返回函数的一种,目的是在函数的执行前或函数执行后先进行相关的处理操作(函数运行期间动态添加功能的成为装饰器),添加在定义函数的前面,实现装饰作用。
例如:
计算函数的执行时间
1 2 3 4 5 6 7 8 9 10 11 12 | import time funtools def log(text) def decorator(fnc): @functools .wraps(fnc) def wrapper( * args, * * kw): start = time.time() func = fnc( * args, * * kw) end = time.time() print ( % s : % s excuted in % s ms % (text,func_name_,(start - end) * 1000 )) return func return wrapper return decorator |
偏函数
固定住某些函数的参数,使函数调用更加方便
例子:
1 2 3 4 | import functools int 2 = functools.partial( int ,base = 2 ) max 2 = functools.partial( max , 10 ) max 2 ( 5 , 6 , 7 ) = 10 |
-------------------------------------------
个性签名:苟日新 日日新 又日新!
如果这篇文章对你有些许帮助,记得在右下角点个“推荐”哦,俯首拜谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何统计不同电话号码的个数?—位图法
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· 用c#从头写一个AI agent,实现企业内部自然语言数据统计分析
· 三维装箱问题(3D Bin Packing Problem, 3D-BPP)
· Windows上,10分钟构建一个本地知识库
· Java虚拟机代码是如何一步一步变复杂且难以理解的?
· 凯亚物联网平台如何通过MQTT网络组件接入设备