zoukankan      html  css  js  c++  java
  • python基础(二十、函数进阶

    16.函数进阶
    6)函数的递归
    函数调用自身的编程技巧称为递归,python递归的最大深度是1000。

    (1)递归函数的特点
    特点:一个函数内部调用自己,函数内部可以调用其他函数,当然在函数内部也可以调用自己
    代码特点:
    ①函数内部的代码是相同的,只是针对参数不同,处理的结果不同
    ②当参数满足一个条件时,函数不再执行。这个非常重要,通常被称为递归的出口,否则会出现死循环!

    (2)递归案例:计算数字累加
    ①需求:
    (a)定义一个函数 sum_numbers
    (b)能够接收一个 num 的整数参数
    (c)计算 1 + 2 + ... num 的结果
    ②代码:

    (3)递归案例:斐波那契数列
    斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

    (4)递归案例:二分法查找数据
    二分法的思路:掐头结尾取中间。
    优点:查找效率非常的高。
    二分法的局限性:数据必须是有序的
    需求:查询一个数据是否在列表(升序)中,如果在返回索引。

    提示:递归是一个 编程技巧,初次接触递归会感觉有些吃力!在处理不确定的循环条件时,格外的有用,例如:遍历整个文件目录的结构、二叉树查询

    7)闭包
    如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数
    在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
    闭包的作用:
    (1)保护变量
    (2)让一个变量常驻内存

    8)装饰器
    装饰器的本质是大型的闭包
    作用:在不改变原代码的基础上给代码增加新的功能
    软件开发的开闭原则:
    开放:可以对软件添加新的功能
    封闭:不可以修改源代码

    (1)装饰器的雏形:

    游戏开挂:

    (2)使用“语法糖@”简化代码

    (3)带有参数的装饰器:
    使用万能传参接收参数,可以兼容多种传参需求

    (4)带返回值的装饰器:

    (5)通用装饰器模型:

    (6)装饰器练习:
    需求:论坛功能有:看菜单、读贴、发帖、收藏,使用装饰器在发帖和收藏前添加登录判断,如果没有登录先登录
    代码:


    运行结果:

    (7)带参数的装饰器:

    运行结果:

    ①带参数的装饰器通用模型:

    ②练习:
    (a)给func1和func2添加记录日志的功能

    (b)要求func1的日志记录在func1.txt中,func2的日志记录在默认文件中

    运行结果:

    8)同一个函数被多个装饰器装饰

    运行结果:

    ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳

  • 相关阅读:
    C#中创建Android项目
    C#中创建Android项目
    在C#中获取当前屏幕的分辨率的方法
    数据库面试
    计算机网络面试
    linux面试
    Java使用递归检索文件个数
    二分查找
    富途证券面经(一面挂)
    Mysql
  • 原文地址:https://www.cnblogs.com/bdzxh/p/14069446.html
Copyright © 2011-2022 走看看