• python 函数(提高篇)


    匿名函数(最高复杂度到三元运算,不可加循环)

    def change(a, b):
        return a**b
    
    
    change(10, 2)
    
    # 匿名函数
    c = lambda x, y: x ** y
    
    print(c(10, 2))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    高阶函数

    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数称之为高阶函数。(听起来好像不是我们印象中的哦,举个例子)

    def get_abs(x):
        if x < 0:
            x = int(str(x).strip("-"))
        return x
    
    
    def num(x, y, f):
        return f(x) ** f(y)
    
    
    res = num(10, -2, get_abs)
    print(res)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    只要满足以下条件中的一个就可以称之为高阶函数:

    接受一个或者多个函数的输入
    return返回另外一个函数

    嵌套函数

    顾名思义就是函数的嵌套,下面举个简单的例子
    请各位看官先看源码思考三个name分别会打印出什么,然后再看结果

    name = "zhangsan"
    
    
    def hello():
        name = "lisi"
    
        def hello1():
            name = "zhaosi"
            print("最里面的打印的是", name)
    
        hello1()
        print("第二层打印的是", name)
    
    
    hello()
    print("最外层打印的是", name)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述
    根据上面的结果,我们不难看出,即便是嵌套函数,参数也是遵循就近原则

    函数的递归

    def test1(x):
        print(x)
        x = int(x / 3)
        if x > 0:
            test1(x)
        print(x)
    
    
    test1(999)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    递归的特性:

    必须要有一个明确的结束条件
    每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出,相当于程序崩溃!!!)

    函数的闭包

    函数内部嵌套函数即外部函数的作用域仍在被内部函数使用,并且内部函数返回自身

    def a():
        name = "zhangsan"
    
        def b():
            print("打印外部的name变量", name)
    
        return b  # 返回是这个函数的内存地址
    
    
    a()()  # 可以理解为 f = a( ) ,f( )就相当于是b( )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    闭包的意义
    返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域!!!

    装饰器

    通过高阶函数+闭包在不改变原有功能的前提下实现新功能,这里暂时先不讲,过于复杂回头我补充

  • 相关阅读:
    前端开发工程师:职业前景、工资、 具体工作
    grafana 监控无图解决
    【面试题精讲】Object类的常见方法有哪些?
    Flask 学习-13.Flask-SQLAlchemy 新建模型和字段
    JVM参数及默认值
    C++基础入门详解(一)
    公司股东退出机制法律分析
    1-UI自动化-初识selenium,编写第一个selenium脚本
    云桌面打开部署在linux的服务特别卡 怎么解决
    搞定蓝牙——第一篇(蓝牙发展史与简述)
  • 原文地址:https://blog.csdn.net/LOVE_jianshen/article/details/126796407