zoukankan      html  css  js  c++  java
  • 高阶函数

    一、递归函数

    1、含义:一个含直接或间接调用本函数语句的函数被称之为递归函数(函数直接或间接调用函数本身,则该函数称为递归函数)

    2、递归函数需要满足以下两个条件:

    1)在每一次调用自己时,必须是(在某种意义上)更接近于解;
    2)必须有一个终止处理或者计算的准则

    阶层的递归函数
    def factorial(n):
    if(n == 0 or n == 1):
    return 1
    else:
    return n * factorial(n-1)

    3、最大递归边界

    1)默认的最大递归边界是1000次

    #获取最大递归值
    import sys
    sys.getrecursionlimit()
    #设置最大递归深度
    sys.setrecursionlimit(5000)

    2)从内存方面讲解递归效率问题

    a、python中不推荐使用递归,因为递归吃内存

    b、递归调用自身时,都会占用一小块内存存储函数中的变量以及结果,使用缓存功能装饰器可以缓存相同参数的函数调用结果,节省内存,提高运行速率

     4、通过缓存解决最大递归限制的问题

    1、python的functools模块中提供了很多高阶函数的操作

    2、lru_cache:缓存功能装饰器

    a、能够缓存相同参数的函数调用结果,可以节约高开销或I/O函数的调用时间

    b、通过lru_cache装饰递归函数

     

    二、匿名函数

    1、语法

    lambda 参数:返回值

    2、使用场景

    a、用来定义一些比较简单,不会重复使用的函数,

    b、函数当作参数使用

    def func(n):
    return n * 3

    以上创建匿名函数:
    lambda n : n*3

     c、匿名函数结合三目运算符

    1)lambda x: x * 10 if x < 5 else x * 2

    参入的参数如果小于5就输出x*10,否则输出x * 2

    2)可处理一些简单的判断逻辑

    三、内置函数

    1、filter内置函数

    过滤函数,接收参数为两个参数,第一个位置参数是函数,第二个位置参数是可迭代对象

    res = filter(lambda n : n >3, [1,2,3,4,5,6,7,8,9])
    print(list(res))

    过滤出列表中大于3的数

    第一个参数函数依次取第二个参数的列表中的元素,进行判断,如果为true则保留,如果为false则去除

    2、abs 获取绝对值

    3、exec 执行python代码

    4、all内置函数

    判断所有的值都不为空,迭代对象内所有的元素都为真,返回True

     传入的是可迭代对象

    5、any内置函数

    迭代对象内只要有一个元素为真,返回True

     传入可迭代对象

    6、map内置函数

    将函数应用于iterable中每一项并输出其结果的迭代器

    7、zip内置函数

    聚合打包:以最短的列表为准

      

     8、其他内置函数

    四、纯函数和函数副作用

     1、纯函数不是一种函数,是一种概念

    2、纯函数的好处

    减轻代码的耦合度

    3、纯函数的概念

    简单来说,一个函数的返回值结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数

    4、纯函数的3个原则

    1)变量都只在函数作用域内获取,作为的函数参数传入

    2)不会产生副作用(side effects),不会改变被传入的数据或者其他数据(全局变量)

    3)相同的输入保证相同的输出

    示例:

    func是纯函数,func2不是纯函数,相同的输入不能保证相同的输出,变量不仅仅是自己的参数还有全局变量c

     func3不是纯函数,它对外部环境有副作用,改变了列表的值

     5、函数的副作用

    副作用是指函数被调用,完成了函数既定的计算任务,但同时因为访问了外部数据,尤其是因为对外部数据进行了写操作,从而一定程度地改变了系统环境

    五、闭包与装饰器

    1、闭包
    1)函数内部可定义函数
    外层函数可以通过return返回内层函数
    2)什么是闭包?
    1、外层函数中嵌套一个内层函数
    2、外层函数的返回值,是内层嵌套的函数名
    3、内层函数对外部有非全局变量的引用

     2、装饰器

    本文来自博客园,作者:%女王%,转载请注明原文链接:https://www.cnblogs.com/lynne-wu/p/15374614.html

  • 相关阅读:
    64位操作系统下IIS报“试图加载格式不正确的程序”错误(转)
    Web编程前端之7:web.config详解
    基于.net的加密汇总(1)
    基于.net的加密汇总(2)
    Web编程前端之6:js刷新页面大全
    SQL Server之3:全文搜索(3)
    Web编程前端之4:css+div多样式可定制完美分页全攻略
    SQL Server之1:全文搜索(1)
    处理程序“PageHandlerFactoryIntegrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”(转)
    SQL Server之8:sql查询每个学生得分最高的两门课
  • 原文地址:https://www.cnblogs.com/lynne-wu/p/15374614.html
Copyright © 2011-2022 走看看