当前位置: 首页 > 后端技术 > Python

Python列表理解-迭代器-生成器-匿名函数详解

时间:2023-03-26 11:30:35 Python

详细介绍了python3匿名函数的用法、推导、迭代器和生成器。1、匿名函数(lambda)个人理解为一种简单的函数定义方式,不用def关键字来定义函数。语法:lambdaparameter:运算参数表达式。添加=lambdax,y:x+yprint(add(3,5))8list(map(lambdax,y:x+y,range(-2,2),range(1,5)))#incomingTwo可迭代对象range(-2,2),range(1,5)[-1,1,3,5]2.可以在列表、字典和集合中使用推导式。列表推导式是创建列表的一种简单方法。#if语句放在forIn[29]之后:[xforxinrange(1,11)ifx%2==0]#对于range(1,11)中的每个元素,可以被整除的输出2形成一个新的listOut[29]:[2,4,6,8,10]#if语句之前可以用forelseIn[30]:[xifx%2==0else-xforxinrange(1,11)]#对于range(1,11)中的每个元素,输出能被2整除的原值,不能被2整除的原值输出为负数,组成新的列表Out[30]:[-1,2,-3,4,-5,6,-7,8,-9,10]字典理解mcase={'a':10,'b':34,'A':7,'Z':3}{k:vfork,vinmcase.items()}{'a':10,'b':34,'A':7,'Z':3}设置derivation{x**2forxin[1,1,2]}#集合不允许重复{1,4}3.迭代器(Iterator)可迭代对象(Iterable)python中的对象,只要有方法__iter__和__getitem__是可迭代对象,可迭代对象可以提供迭代器。迭代器是定义__next__方法的python对象。判断对象是可迭代对象还是迭代器fromcollections.abcimportIterable,Iteratordefg():yield1yield2yield3#判断是否是python可迭代对象print('Iterable?[1,2,3]:',isinstance([1,2,3],Iterable))#isinstance()判断一个对象是否是Iterable对象print('Iterable?'abc':',isinstance('abc',Iterable))print('Iterable?123:',isinstance(123,Iterable))print('Iterable?g():',isinstance(g(),Iterable))#是不是python迭代器?print('Iterator?[1,2,3]:',isinstance([1,2,3],Iterator))#isinstance()判断一个对象是否为Iterator对象print('Iterator?iter([1,2,3]):',isinstance(iter([1,2,3]),Iterator))print('Iterator?'abc':',isinstance('abc',Iterator))print('Iterator?123:',isinstance(123,Iterator))print('Iterator?g():',isinstance(g(),Iterator))Iterable?[1,2,3]:TrueIterable?'abc':TrueIterable?123:FalseIterable?g():TrueIterator?[1,2,3]:FalseIterator?iter([1,2,3]):TrueIterator?'abc':FalseIterator?123:FalseIterator?g():True当迭代(Iteration)使用循环遍历一个python对象时,这个过程就叫做迭代。4.生成器生成器也是迭代器,但是只能迭代一次。这是因为它们并不是把所有的值都存储在内存中(这样可以节省很多内存),而是边循环边生成值(生成器保存算法,可以计算出下一个元素的值)。创建生成器的方法如下:()环绕列表理解生成g=(x*xforxinrange(10))#只迭代一次,只存储算法,不生成存储在内存中的所有元素。gat0x000002B53772C4C0>foriing:#for循环打印每个生成??器中的元素,并在执行输出中添加yieldnothing(只迭代一次,只存储算法)print(i)0149162536496481自定义函数当插补算法复杂时,关键字构建生成器使用自定义函数。例如,考虑一个计算斐波那契数列的生成器。deffibon(n):a=b=1foriinrange(n):yielda#Thisfunctionisageneratora,b=b,a+bforxinfibon(1000000):print(x)#No需要担心会占用大量资源以上就是本次分享的全部内容,如果觉得文章还不错,欢迎关注公众号:Python编程学习圈,每日干货分享,送》J》也能收到很多学习资料。或者去编程学习网了解更多编程技术知识。