Python自动化开发-函数03
<1>函数递归
1.函数递归的定义
函数递归:在函数内部,可以调用其他函数。如果在调用一个函数的过程中直接或间接调用自身本身。
2.函数递归的特性
1). 必须有一个明确的结束条件;
2). 每次进入更深一层递归时,问题规模相比上次递归都应有所减少;
3). 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)。
函数递归例1:

#!/usr/bin/env python # -*- coding:utf-8 -*- def calc(m): print(m) if int(m/2)==0: return m return calc(int(m/2)) calc(10)
代码运行结果:
10
5
2
1
<2>函数作用域
作用域在定义函数时就已经固定了,不会随着调用位置的改变而改变!
函数作用域例1:

#!/usr/bin/env python # -*- coding:utf-8 -*- name="feiyang" def test01(): name="lijing" print(name) def test02(): name="lisa" print(name) test01() test02() print(name)
代码运行结果:
lisa
lijing
feiyang
<3>匿名函数
匿名函数主要是和其它函数搭配使用!
匿名函数例1:

#!/usr/bin/env python # -*- coding:utf-8 -*- test=lambda x:x+6 r=test(10) print(r)
代码运行结果:
16
匿名函数例2:

#!/usr/bin/env python # -*- coding:utf-8 -*- name="加油" f1=lambda x:x+"-奥运健儿" r=f1(name) print(r)
代码运行结果:
加油-奥运健儿
<4>函数式编程
编程的方法论大致有三种:1)面向过程;2)函数式;3)面向对象。
a.高阶函数
b.map函数
map函数例1:

#!/usr/bin/env python # -*- coding:utf-8 -*- #计算一个列表每个元素的二次方 num01=[1,2,3,4,5] ret=[] v=map(lambda x:x**2,num01) for i in v: ret.append(i) print(ret)
代码运行结果:
[1, 4, 9, 16, 25]
c.filter函数
filter函数例1:

#!/usr/bin/env python # -*- coding:utf-8 -*- #filter函数 #过滤掉所有以sj结尾的元素,剩下的保留。 str01=["liyifeng_sj","wangyang_sj","liye"] r=filter(lambda n:not n.endswith("sj"),str01) print(list(r))
代码运行结果:
['liye']
d.reduce函数
reduce函数例1:

#!/usr/bin/env python # -*- coding:utf-8 -*- #python3需要从functools模块中导入reduce函数才可以使用,python2直接使用不用导入! #计算列表里所有元素之积,初始值为10 from functools import reduce sum01=[1,2,3] r=reduce(lambda x,y:x*y,sum01,10) print(r)
代码运行结果:60
e.内置函数map/filter/reduce总结
1) map函数:处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素个数及位置与原来一样。
2)filter函数:遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来。
3)reduce函数:reduce:处理一个序列,然后把序列进行合并操作。
filter函数例1:

#!/usr/bin/env python # -*- coding:utf-8 -*- #年龄最小的留下来 p01=[ {'name':'lucy','age':100}, {'name':'wangqiang','age':1000}, {'name':'ningcaichen','age':900}, {'name':'dakongyi','age':16}, ] r=list(filter(lambda p:p['age']<=18,p01)) print(r)
代码运行结果:
[{'age': 16, 'name': 'dakongyi'}]
reduce函数例1:

#!/usr/bin/env python # -*- coding:utf-8 -*- from functools import reduce #python3需要从functools模块中导入reduce函数才可以使用,python2直接使用不用导入! #计算1+2+3+..+100的总和 print(reduce(lambda x,y:x+y,range(100),100)) print(reduce(lambda x,y:x+y,range(1,101)))
代码运行结果:
5050
5050
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
2020-12-30 NoSQL数据库-MongoDB