美文网首页
函数(三)

函数(三)

作者: qianranow | 来源:发表于2018-04-27 15:02 被阅读37次

    0. 匿名函数


    • 概念:lambda函数 ,指 没有名字 的函数
    • 形式:
      1. 格式:lambda 参数1, 参数2, ...: 表达式
      
      2. 限制:
         (1) 只能写一个表达式,不能直接return
         (2) 表达式的结果就是返回值
         (3) 只适用于一些简单的操作处理
      
    • 场景
      l = [{"name": "wxx", "age": 18}, {"name": "xdy", "age": 6}, {"name": "xfq", "age": 3}]
      result = sorted(l, key=lambda x: x["age"])
      print(result)
      

    1. 闭包


    • 概念
      1. 在函数嵌套的前提下
      2. 内层函数引用了外层函数的变量(包括参数)
      3. 外层函数,又把内层函数当做返回值进行返回
      4. 内层函数 + 所引用的外层变量,称为闭包
      
    • 形式
      def outside(a):
          b = 10
      
          def inner():
              print(a)
              print(b)
          return inner
      
      result = outside(10)
      result()
      
    • 场景
      # 外层函数,根据不同的参数,来生成不同作用功能的函数
      def line_config(content, length):
          def line():
              print("-"*(length // 2) + content + "-"*(length // 2)) 
          return line
      
      line1 = line_config("秦子阳", 40)
      line1()
      line2 = line_config("小清新", 80)
      line2()
      
    • 注意
      1. 闭包中, 若要修改引用的外层变量, 需要使用 nonlocal 声明变量; 
         否则当做是闭包内, 新定义的变量
      
         def demo():
             num = 66
             def inner():
                 nonlocal num
                 num = 88
                 print(num)
             print(num)
             return inner
         result = demo()
         result()
      
      2. 值捕获 
         (1) 闭包在 "其被定义的上下文中" 捕获变量;
         (2) 即使定义这些变量的 "原作用域已经不存在";
         (3) 闭包仍然可以在 "被调用时" "引用和修改这些值"
          
         def test():
             funcs = []
             for i in range(1, 4):
                 def test2(num):
                     def inner():
                         print(num)
                     return inner
                 funcs.append(test2(i))
             return funcs
      
         newFuncs = test()
         print(newFuncs)
      
         newFuncs[0]()
         newFuncs[1]()
         newFuncs[2]()
      

    相关文章

      网友评论

          本文标题:函数(三)

          本文链接:https://www.haomeiwen.com/subject/xhnblftx.html