- 0
- 0
- 约7.27千字
- 约 14页
- 2021-01-27 发布于山东
- 举报
再说函数~那些不得不知道的事儿
前面的课程中,我们已经对函数有了简单的了解
函数的声明、函数的的调用、函数的参数以及返回值等等
本节内容主要对函数中的一些高级操作进行讲解,方便大家在项目操作过程中对
函数的操作更加灵活一些
函数递归
函数变量赋值
参数中的函数
匿名函数
返回值中的函数:闭包
偏函数
装饰器
1. 函数递归
函数的递归,就是让在函数的内部调用函数自身的情况,这个函数就是递归函数。
递归函数其实是另外一种意义的循环
如:计算一个数字的阶乘操作,将这个功能封装成函数fact(num)
提示:阶乘算法是按照小于等于当前数字的自然数进行乘法运算
计算5 的阶乘:5 X 4 X 3 X 2 X1
计算n 的阶乘:n X (n - 1) X ... X 3 X 2 X 1
# 定义一个递归函数
def fact(num):
if n == 1:
return n
return n * fact(n - 1)
# 执行函数
fact(1)
1
fact(2)
2
fact(3)
6
fact(4)
24
fact(5)
120
fact(9)
362880
递归操作,整个计算过程如下
计算5 的阶乘:fact(5)
fact(5)
-5 X fact(5 - 1)
-5 X (4 X fact(4 - 1))
-5 X (4 X (3 X fact(3 - 1)))
-5 X (4 X (3 X (2 X fact(2 - 1)))))
=5 X (4 X (3 X (2 X 1)))
=5 X (4 X (3 X 2))
=5 X (4 X 6)
=5 X 24
=120
我们在之前说过,递归就是另外一种特殊的循环:函数级别的循环
所以递归函数也可以使用循环来进行实现
但是循环的实现思路没有递归清晰。
使用递归函数时一定需要注意:递归函数如果一旦执行的层数过多就会导致内存
溢出程序崩溃。
有一种做法是将递归函数的返回值中,不要添加表达式,而是直接返回一个函数,
这样的做法旨在进行尾递归优化,大家如果有兴趣的话可以上网自行查询一下;
由于不同的解释器对于函数递归执行的不同的处理,所以递归的使用请慎重分析
和操作。
2. 函数变量赋值
函数,是一种操作行为
函数名称,其实是这种操作行为赋值的变量
调用函数,其实是通过这个赋值的变量加上一堆圆括号来进行函数的执行
# 定义了一个函数,函数命名为printMsg
def printMsg (msg):
print(you say : + msg)
# 通过变量printMsg 来进行函数的调用
printMsg(my name is jerry!)
既然函数名称只是一个变量,变量中存放了这样的一个函数对象
我们就可以将函数赋值给另一个变量
# 将函数赋值给变量pm
pm = printMsg;
# 就可以通过pm 来进行函数的执行了
pm( my name is tom!)
3. 参数中的函数
函数作为一个对象,我们同样可以将函数当成一个实际参数传递给另一个函数进
行处理
# 系统内置求绝对值函数abs(),赋值给变量f
f = abs;
# 定义一个函数,用于获取两个数据绝对值的和
def absSum(num1, num2, fn):
return fn(num1) + fn(num2)
# 调用执行函数
res = absSum(-3, 3, f)
# 执行结果
~ 6
函数作为参数进行传递,极大程度的扩展了函数的功能,在实际操作过程中有非
常广泛的应用。
4. 匿名函数
在一个函数的参数中,需要另一个函数作为参数进行执行:
def printMsg(name, fn):
print(name)
fn()
常规做法是我们定义好自己的函数,然后将函数名称传递给参数进行调用
def f():
print(日志记录:函数执行完成)
printMsg(jerry, f)
重点在这里
我们通过如下的方式来调用函数
printName(tom, lambda:print(函数执行完成...))
# 执行结果
tom
函数执行完成
在printName 函数调用时,需要一个函数作为参数的地方,出现了lambda 这样
一个词汇和后面紧跟的语句
lambda 是一种表达式,一种通过表达式来实现简单函数操作的形式,lambda
表达式可以看成是一种匿名函数
常规
您可能关注的文档
最近下载
- T_SXDZ 035—2020_矿井奥灰水带压开采安全性评价报告编制细则.pdf VIP
- 项目管理样板点策划方案.pdf VIP
- 广东省教育科学研究课题开题报告书模版.pdf VIP
- 90S503_格栅、格网及起吊架.pdf VIP
- DB61T 1417-2021 水工隧洞施工通风技术规范.docx VIP
- JTG B05-01-2013 公路护栏安全性能评价标准.docx VIP
- 一种高速离心空压机与膨胀机集成装置.pdf VIP
- 2026年中考语文一轮复习(河南)古诗词阅读 古诗词曲对比整合 课件(共69张ppt).pptx VIP
- BOSE博士 3·2·1® 家庭娱乐系统 用户指南支持 多语言.pdf
- 《勾股定理》练习题及答案.doc VIP
原创力文档

文档评论(0)