生成器01什么是生成器? 记住两个关键:生成器是一种特殊的函数方法。意味着它和函数(def)密不可分。基于上一点,只要函数中出现yield关键字,就是生成器函数。 初学的你,还是太难理解?02通俗的讲解 你可以将生成器理解为一个盒子,你可以向这个盒子里随意添加元素,当你需要的时候,再取出来用。 请看下面的例子:普通函数deffunc():return1ffunc()print(函数返回值:,f)函数返回值:1print(函数返回值的类型:,type(f))函数返回值的类型:classint生成器defgenfunc():yield1yield2ggenfunc()print(生成器对象:,g)生成器对象:generatorobjectgenfuncat0x00000189B8CFF7C8print(生成器对象的类型:,type(g))生成器对象的类型:classgenerator读取生成器对象的值,因为生成器也是一个迭代器,实现了python的迭代协议(即实现了iter方法)foriing:print(生成器对象的值:,i)生成器对象的值:1生成器对象的值:203生成器到底有什么用? 作用:惰性求值(一边循环一边计算的机制),节省性能04生成器的常见用途?读大文件网络爬虫scrapy框架协程 举个例子:斐波那契数列(0,1,1,2,3,5。。。),打印斐波那契数列前50个元素不使用生成器,会消耗大量内存deffib(idx):res〔〕n,a,b0,0,1whilenidx:res。append(b)a,bb,abn1returnresresfib(100)print(res)使用生成器,可节约大量内存defgenfib(idx):n,a,b0,0,1whilenidx:yieldba,bb,abn1foriingenfib(100):print(i)匿名函数01什么是匿名函数? 当:函数实现比较简单函数不需要被多个地方调用懒得给这个函数起名字 时,我们可以使用匿名函数。 初学的你,还是太难理解?02通俗的讲解 你想实现一个求x的平方的函数,但是这个函数太简单,不值得专门def定义,同时,你忘记了平方的英文如何拼写,要是命名成pingfang,又显得自己太low,于是乎,你可以不给这个函数起名字,还能实现它。这就是匿名函数lambda表达式。 比如:求一个数的平方不用lambda表达式defsquare(x):returnxxprint(square(2))使用lambda表达式写法:lambda返回值:计算表达式slambdax:xxprint(s(2))一如既往,做个总结 01如果你是初学者,可以先不掌握生成器和匿名函数,待学成python后,再行琢磨; 02在实际工作中,生成器和匿名函数的使用频次,相对较高,并且在面试中是高频问点。