zoukankan      html  css  js  c++  java
  • 09 匿名函数、函数作用域、闭包、递归

    匿名函数(lambda)

    语法规则:

    lambda 参数:表达式

    filter(lambdax: x>10, li)

    匿名函数:可以赋给一个变量,重复使用。

    fun1 = lambda x: x * 10
    print(fun1(10))
    打印结果: 100
    
    fun = (lambda x: x * 10)(5)
    print(fun)
    打印结果: 50

    函数作用域

    01外部不能访问函数内部变量:

    def fun1():
    x = 1
    print(x)

    02函数内部能够访问函数外部变量:


    x = 123
    def fun2():
    print(x)

    03函数里面不能修改外部变量:


    x = 123
    def fun3():
    x = x + 1
    print(x)

    04函数里面和函数外部变量名相同:


    x = 123
    print(x,id(x))
    def fun1():
      x = 456
      return x,id(x)
    a = fun1()
    print(a)

    函数内部:函数内部的变量,作用域只在函数内部,函数内部不可以直接更改函数外部的变量

    global: 函数内部如果需要改变全局变量,就需要使用global修饰变量

    实例:

    x = 123
    def fun1():
        global x
        x +=1
        return x
    b = fun1()
    print(b)

    nonlocal: 在函数嵌套函数的情况下,同样也有函数作用域的问题,但是python3中提供了方便,只需要使用nonlocal就可以在里层函数内部修改外部函数变量。多层函数嵌套,nonlocal只修改上一层函数嵌套的值。

    实例:

    def fun2():
        x = 123
        def fun3():
            nonlocal x
            x +=1
            return x
        return fun3()
    a = fun2()
    print(a)

    闭包

    内嵌函数:

    def fun1():
        print('fun1()在被调用')
    ​
        def fun2():
            print('fun2()在被调用')
    ​
        fun2()
    ​
    ​
    fun1()
    ​

    闭包:

    def func1():
        print('外层函数')
    ​
        def func2():
            print('内层函数')
            return 1 + 1return func2()
    ​
    ​
    result = func1()
    print(result)
    ​
    打印结果:
    外层函数
    内层函数
    2

    闭包是函数里面嵌套函数,外层函数返回里层函数,这种情况称之为闭包

    闭包是概念,不是某种函数类型,和递归的概念类似,就是种特殊的函数调用

    闭包可以得到外层函数的局部变量,是函数内部和函数外部沟通的桥梁

    递归函数

    递归中可以函数自身调用自身,但是使用时类似于条件循环一样,要有递归的终止条件

    递归实例:

    def fun1():
        print('金钱 == 爱情')
        return fun1()
        
        
    fun1()

    阶乘:

    def func(a):
        if a == 1:
            return a
        else:
            return func(a - 1) * a
            # result func(a - 1) + a    实现累加
    
    
    result = func(5)
    print(result)
    
    打印结果:120
  • 相关阅读:
    老男孩Day17作业:后台管理平台编辑表格
    老男孩Day16作业:登录、注册、后台管理页面(动态)
    老男孩Day15作业:商城列表页面(静态)
    老男孩Day14作业:堡垒机
    老男孩Day13作业:ORM学员管理系统
    老男孩Day12作业:RabbitMQ-RPC版主机管理程序
    老男孩Day10作业:主机管理程序
    老男孩Day9作业:高级FTP
    面试遇见钓鱼公司怎么办?
    宝能技术岗面试
  • 原文地址:https://www.cnblogs.com/zcmq/p/9048957.html
Copyright © 2011-2022 走看看