Python教程18-再说函数 (1).pdfVIP

  • 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 表达式可以看成是一种匿名函数 常规

文档评论(0)

1亿VIP精品文档

相关文档