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
  • 相关阅读:
    软件工程作业--评价自己经常使用的输入法
    课堂练习-找水王
    软件工程——找水王(续)
    软件工程——评价输入法
    软件工程——《你的灯亮着吗》读书笔记
    软件工程——课堂练习“找水王”
    软件工程结队项目——智能点餐系统典型用户及用户场景分析
    软件工程课堂练习——N层电梯只停一层求乘客爬楼层数最少(基本方法+优化方法)
    软件工程课堂练习——求买书最低价格
    结队项目——智能订餐系统用户调研报告
  • 原文地址:https://www.cnblogs.com/zcmq/p/9048957.html
Copyright © 2011-2022 走看看