python教程分享python教程之生成器和匿名函数

目录
  • 生成器
    • 01 什么是生成器?
    • 02 通俗的讲解
    • 03 生成器到底有什么用?
    • 04 生成器的常见用途?
  • 匿名函数
    • 01 什么是匿名函数?
    • 02 通俗的讲解
  • 总结

    生成器

    01 什么是生成器?

    记住两个关键:

    • **生成器是一种特殊的函数方法。**意味着它和函数(def)密不可分。
    • 基于上一点,只要函数中出现yield关键字,就是生成器函数

    初学的你,还是太难理解?

    02 通俗的讲解

    你可以将生成器理解为一个盒子,你可以向这个盒子里随意添加元素,当你需要的时候,再取出来用。

    请看下面的例子:

    # 普通函数  def func():      return 1  f = func()  print("函数返回值:",f)  ->函数返回值:1  print("函数返回值的类型:",type(f))  ->函数返回值的类型:<class 'int'>  # 生成器  def gen_func():      yield 1      yield 2  g = gen_func()  print("生成器对象:",g)  ->生成器对象:object gen_func at 0x00000189b8cff7c8>  print("生成器对象的类型:",type(g))  ->生成器对象的类型:<class 'generator'>  # 读取生成器对象的值,因为生成器也是一个迭代器,实现了python的迭代协议(即实现了__iter__方法)  for i in g:   print("生成器对象的值:",i)  ->生成器对象的值: 1  ->生成器对象的值: 2  

    03 生成器到底有什么用?

    作用:惰性求值(一边循环一边计算的机制),节省性能

    04 生成器的常见用途?

    • 读大文件
    • 网络爬虫 scrapy 框架
    • 协程

    举个例子:斐波那契数列(0,1,1,2,3,5…),打印斐波那契数列前50个元素

    # 不使用生成器,会消耗大量内存  def fib(idx):     res=[]     n, a, b = 0, 0, 1     while n < idx:         res.append(b)         a, b = b, a+b         n += 1     return res  res = fib(100)  print(res)  # 使用生成器,可节约大量内存  def gen_fib(idx):     n, a, b = 0, 0, 1     while n < idx:         yield b         a, b = b, a+b         n += 1  for i in gen_fib(100):     print(i)  

    匿名函数

    01 什么是匿名函数?

    当:

    • 函数实现比较简单
    • 函数不需要被多个地方调用
    • 懒得给这个函数起名字时,我们可以使用匿名函数。

    初学的你,还是太难理解?

    02 通俗的讲解

    你想实现一个求x的平方的函数,但是这个函数太简单,不值得专门def定义,同时,你忘记了平方的英文如何拼写,要是命名成 “pingfang”,又显得自己太low,于是乎,你可以不给这个函数起名字,还能实现它。这就是匿名函数lambda表达式。

    比如:求一个数的平方

    # 不用 lambda 表达式  def square(x):      return x * x  print(square(2))  # 使用 lambda 表达式  # 写法:lambda 返回值:计算表达式  s = lambda x: x * x  print(s(2))  

    总结

    1 如果你是初学者,可以先不掌握生成器和匿名函数,待学成python后,再行琢磨;

    2 在实际工作中,生成器和匿名函数的使用频次,相对较高,并且在面试中是高频问点。

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注<猴子技术宅>的更多内容!

    需要了解更多python教程分享python教程之生成器和匿名函数,都可以关注python教程分享栏目—猴子技术宅(www.ssfiction.com)

    本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

    如若转载,请注明出处:https://www.ssfiction.com/pythons/1031122.html

    发表评论

    邮箱地址不会被公开。 必填项已用*标注