学完函数,我们还需要知道一些让我们能够提高效率的高级特性:
使用lambda关键字来创建匿名函数:
- lambda表达式只是一个表达式,而不是是一个代码块,函数体比def简单很多;
- lambda表达式仅仅能够封装一些简单的逻辑;
- lambda表达式拥有自己的命名空间。
>>> def plusitem(pam): ... return pam*pam ... >>> type(plusitem) <class 'function'> >>> plusitem(12) 144 >>> nonamefuc=lambda item:item*item >>> type(nonamefuc) <class 'function'> >>> nonamefuc(12) 144
说明:lambda表达式就是一个函数昂。
列表推导式:
在不知道有列表推导式之前,我们想要生成一个[1,2,3...,9]的列表,是这样子写的 :
>>> mylis=[] >>> for item in range(1,10): ... mylis.append(item) ... >>> mylis [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果我们有了列表推导式,可以十分简洁地生成一个列表:
>>> newlis=[item for item in range(1,10)] >>> newlis [1, 2, 3, 4, 5, 6, 7, 8, 9]
列表推导式的花式玩法:
1、增加条件判断
>>> jishulis=[x for x in range(1,10) if x%2==1] >>> jishulis [1, 3, 5, 7, 9]
2、多重循环
>>> shuangceng=[x*y for x in range(1,10) for y in [1,2,3]] >>> shuangceng [1, 2, 3, 2, 4, 6, 3, 6, 9, 4, 8, 12, 5, 10, 15, 6, 12, 18, 7, 14, 21, 8, 16, 24, 9, 18, 27]
迭代:
- 迭代的概念就是通过for循环遍历对象的每个元素的过程。
- python中的for可以遍历任何可迭代对象。
- 在python中list、tuple、str、dict、set都是可迭代数据类型。
- 在python中可以使用collextions模块中的Iterable类型来判断一个对象是否可以迭代。
迭代器:
一种可以被遍历的对象,并且可以作用于next()函数。迭代器对象从第一个元素访问,直到所有的元素被访问完才结束。迭代器只能往后遍历不能回溯。迭代器常用的两个方法iter()和next()。
我的理解就是:
把迭代器看成时间 你可以往后看十年、二十年、但是最终你是无法看到时间的终点的
而 我们把 可迭代对象 看成我们的上下五千年历史 我们可以看 公元10年 公元100 知道我们可以追溯到当下 2020年 可迭代对象是有终点的
python可以通过使用iter()函数 将上下五千年史---可迭代对象 转换成 历史长河---迭代器
>>> from collections import Iterable >>> isinstance('123',Iterable) True >>> isinstance(123,Iterable) False >>> lis=[1,2,3,4] >>> lis [1, 2, 3, 4] >>> it=iter(lis) >>> it <list_iterator object at 0x0000021E54846BE0> >>> next(it) 1 >>> for x in it: ... print(x) ... 2 3 4
说明:iter()可以创建迭代器,使用next()可以获取迭代器的下一个元素。for循环可以遍历迭代器。python中的for循环本质上就是通过next()函数实现的。
生成器:
有时候列表内的元素个数非常巨大,一下子制造出来放到内存中是内存压力会很大。我们可以通过某种算法把元素推算出来,用到哪儿时再计算出来使用。这就是生成器的作用。
通过圆括号---推导式的方法,可以编写生成器:
>>> g=(x for x in [2,4,6,8,10]) >>> g <generator object <genexpr> at 0x0000021E5498C270> >>> g[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'generator' object is not subscriptable >>> next(g) 2 >>> for item in g: ... print(item) ... 4 6 8 10
使用yield关键字可以让一个函数制造出一个生成器。
比如下面,返回一个列表元素的平方。
>>> def genfunc(pams): ... print('开始了..') ... for item in pams: ... yield item*item ... >>> lis=[1,2,3,4,5] >>> rtn=genfunc(lis) >>> rtn <generator object genfunc at 0x000001B6598795F0> >>> next(rtn) 开始了.. 1 >>> next(rtn) 4
说明: