Day13 匿名函数,内置函数,闭包

01今日内容大纲

  1. 如何学习?
    • 下午第一件事情:自己总结
    • 一定要 预习
    • 分配比例:
      • 2/3 的时间放在总结上了 推荐时间花费 1/3的时间
      • 晚上八点到九点之前,完成总结和代码联系
      • 八点到九点之后,写作业(作业一定要完成)
      • 半个小时预习
      • 学习结束后,不玩游戏,不看电视剧 严格禁止自己
      • 一年十万行 标准程序员 一天最少二百行
      • 好的学习方法 事半功倍
  2. 匿名函数
  3. 内置函数(重要)
  4. 闭包

02昨日内容讲解

  1. 昨日内容回顾:
    1. 生成器:生成器就是迭代器。生成器是自己用python代码构建的。
      • 生成器函数
      • 生成器表达式
      • python内部提供的。
    2. 如何判断是函数,还是生成器函数
    3. yield 和 return区别?
    4. yield 和 yield from 区别?
      • yield from 将一个可迭代对象,变成一个生成器。
    5. 列表推导式,生成器表达式:
      • 循环模式:[i for i in iterable ]
      • 筛选模式:[i for i in iterable if 条件 ]
    6. 内置函数?(68个内置函数)

03今日内容

  1. 匿名函数

    Day13 匿名函数,内置函数,闭包

  2. 内置函数。

    1. print 屏幕输出

      # print函数定义:
      # def print(self,*args,sep = '',end = '\n',file = None)
      # 	pass
      print(1,2,3,4,sep = '|',end = ' ** ')
      print('hello world')
      
    2. 数据类型转换函数:

      # 常用:int() str() bool() list() 
      # tuple() dict() set()
      # 创建字典的几种方式:
      # 1. 直接创建
      # 2.通过元组的特性创建字典
      dic1 = ([(1,'one'),(2,'two')])
      print(dict(dic1))
      # 3. 通过键值对创建字典
      dic2 = dict(hello = 1,world = 2)
      print(dic2)
      # 4. fromkeys
      l1 = [1,2,3,4]
      dic3 = dict.fromkeys(l1,'one')
      print(dic3)
      # dict 字典的一个方法:update用于更新字典中的键/值对,可以修改存在对应的值,也可添加新的键/值到字典中
      
    3. abs() 返回绝对值

      print(abs(-9))
      
    4. sum()求和(求一个可迭代对象的所有元素的和)

      l1 = [1,2,3,4]
      print(sum(l1,111))
      
    5. reversed() 将一个序列反转并称成一个新的序列,返回翻转序列的迭代器

      l1 = [1,2,3,4]
      ret = reversed(l1)  # 获取的是一个生成器
      print(next(ret))
      
    6. bytes:把字符串转换成bytes类型

      s1 = '中国'
      ret = s1.encode('utf-8')  # 字符串转换成字节数据类型
      print(ret)
      ret1 = bytes(s1,encode = 'utf-8')  # 将字符串转换成字节
      print(ret1)
      
      
    7. zip ()拉链方法:

      函数用于可将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的内容。如果各个迭代器的元组个数不一致,则按照长度最短的返回

      l1 = [1,2,3]
      l2 = ['one','two','three','four']
      l3 = ['a','b','c','d','e']
      ret = zip(l1,l2,l3)  # 返回的是一个迭代器
      print(list(ret))
      
    8. min/max 函数

      l1 = [1,2,3,2,3,56,67,7,2,-3,-1,-6]
      print(min(l1))
      
      # 求出列表中绝对值最小的数
      print(min(l1,key = lambda a : abs(a)))
      # 凡是可以加key参数的:它会自动的将可迭代对象中的每个元素按照顺序传入key对应的函数中,并且对函数的返回值进行操作
      
    9. sorted ()排序函数 与sort不同,sorted内置函数会生成一个新的列表

      l1 = [1,2,3,4,5]
      l2 = sorted(l1,reverse = 1)
      print(l2)
      
      # 按照字典的值排序
      dic = {'one':234,'two':2342,'three':23}
      dic2 = sorted(dic,key = lambda a:dic[a])
      print(dic2)
      
    10. filter()相当于列表推导式的筛选模式

      print([i for i in range(1,5) if i > 3])
      l1 = [i for i in range(1,5)]
      ret = filter(lambda a : a > 3,l1)
      print(ret)
      print(list(ret))
      
    11. map 相当于列表推导式的循环模式

      print([i**2 for i in range(1,6)])
      ret = map(lambda a : a ** 2 ,range(1,5))
      print(ret)
      print(list(ret))
      
    12. reduce():reduce函数的作用是先把列表中的前两个元素取出来,计算出一个值后临时保存着,接下来用这个临时保存的值和列表中第三个元素进行计算,求出一个新的值,将最开始临时保存的值替换掉,然后再用这个新的临时值和列表中第四个元素计算。以此类推

      from functools import reduce
      def func(x,y):
          return x*10  + y
      ret = reduce(func,range(1,6))
      print(ret)
      print(list(ret))
      
  3. 闭包:

    Day13 匿名函数,内置函数,闭包

    • 上面被红色框 框起来的区域就是闭包,被蓝色圈起来的那个变量应该是make_averager()函数的局部变量。他应该是随着 make_averager()函数的执行结束之后而消失。但是他没有,这是因为此区域形成了 闭包。 series 变量就变成了一个叫做 *变量 的东西,averager函数的作用会延伸到包含*变量series 的绑定。也就是说,每次调用avg 对应的averager函数时,都可以引用这个*变量series,这个就叫做闭包。
  4. 闭包的应用:保存局部信息不被销毁,保证数据的安全性。

  5. 闭包的应用:可以保存一些非全局变量但是不易被销毁,改变的数据。

04 今日总结

  1. 匿名函数 (一句话函数)
  2. 内置函数
  3. 闭包的作用和判断

05明日预习

  1. 装饰器
上一篇:Day13_面向对象 Object类


下一篇:每天一道LeetCode Day13:二叉树的锯齿层序遍历