python基础学习之函数进阶【匿名函数、作用域关系、闭包、递归】

时间:2022-04-17 04:49:22
    1. 匿名函数

      lambda的用法:

      lambda x:x+1

      解释,同等于以下函数

      def test(x):

      return x+1

      因为没有函数名,所以称为匿名函数

      只适用于简易的逻辑,复杂逻辑无法实现

      lambda一般是嵌套在其他内容中,只是为了简化代码

    2. 函数作用域

      理解全局变量和局部变量的概念

      全局变量,定义的变量无缩进,即在代码层最外围;

      局部变量,定义的变量有缩进,属于某个代码块中。

      全局变量:

      a  = 1

      def test():

      print(a)    #结果为1

      print(a)    #结果为1

      局部变量:

      def test():

      a = 1

      print(a)    #结果为1

      print(a)    #报错,找不到a变量

      ○上一级作用域范围内无法调取下一级作用域的变量

      因为函数运行结束后,被释放掉了,其中所有内容都不存在了

      全局变量和局部变量的关系

      a = 1

      def test():

      a = 2

      print(a)    #结果a = 2

      print(a)    #结果a = 1

      函数内部的重新定义同名局部变量,不会影响全局变量,函数输出的时候,会现在当前作用域寻找改变了,找不到,就去上一级去找,再找不到,再去上一级,直到全局作用域。

      如果在函数内需要对变量进行操作,比如加1减1之类,必须在当前作用域定义,或者申明【global】和【nonlocal】

      global:在该作用域内申明该变量为全局变量,出现对该变量的操作,即为对全局变量的操作,改变后,同步改变全局变量(因为,你没有新定义变量,如果你是新定义的,就改变你定义的,不改变全局)

      nonlocal:在该作用域内申明该变量为局部变量,在嵌套体系内寻找上一层的局部变量

      如果什么都不写,会自动返回寻找上一层的该变量,如果上一层没有,就再往上一层找。

    3. 闭包

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

      【个人理解为,嵌套函数中,外层函数返回内层函数名,可以将变量在第一层做修改后,放入下一层去运行】

      def fun(a):
              a = a + 1
          def func(x):
              print(a**x)
          return func

      fun(1)(2)       #结果为4

    4. 递归

      递归就是函数在结尾自己 调用自己

      def calc(x)

      print(x)

      calc(x)    #无脑循环

      递归原则,其作用范围应该是越来越小,即他有个结尾,不然无脑循环肯定报错

    5. 回调

      回调就是函数之间调用的一种情况

      s = int(input('请输入有效值'))

      def fun1():
          print('人间至帅--疏楼龙宿')

      def fun(x,y):
          if y > 1:
                      x()
          else:
              print("出错了")

      fun(fun1,s)

      即在该函数中,fun1函数被传入fun函数中,通过判断后其他条件来决定是否运行该函数,按照函数的规则一步步运行即可