python|python高级特性

大家好,这里是长弓
前几篇我们学习了python的基础语法和函数
开发应用时,我们都期望一个较高的开发效率及较少的代码量
因此,今天我们来学python的高级特性
python|python高级特性
文章图片


目录
切片
list与tuple切片
str切片
迭代
列表生成式
生成器和迭代器
生成器
迭代器




切片 list与tuple切片 我们之前学习了list和tuple,常常需要提取其中的元素,我们实践一下
我们先看前两行,最基础的,我们构建一个新list,从L中取出元素放进去
python|python高级特性
文章图片

但这个方法是不可以延申的,比如我们想取出3个数据,或4个数据呢?
我们可以使用下面循环的方法,只需要改变n的数值,便可以对应取出的元素
【python|python高级特性】但每次都写这串代码,未必太过琐碎了,因此人们想出了更好的方法,切片
python|python高级特性
文章图片

python|python高级特性
文章图片

这便是L = ['张三','李四','王五','赵六']的切片操作,我们知道list可以从下标取出对应元素,,L[0:3]就是取出,下标为0,1,2的元素,即不包括3.第二行说明为0时可省略。
list[-1]是list中的最后一个元素,这里也可以使用,L[-2:]就是倒数第二个元素到最后一个元素,L[-2:-1]则又是最后一个元素前,故不包含'赵六'。
str切片 最后,不仅是list和tuple可以进行切片操作,str字符串类型也可以
python|python高级特性
文章图片

第一种是读取前4个元素,第二个是隔3个元素一读取。
python|python高级特性
文章图片

最后,我们可以想想为什么叫它切片呢?
比如这个 'ABCDEFG'[:4],我们在源数据整体取了一部分,可不就像从火腿上切了一片下来(这里数据太少应该叫切段)
python|python高级特性
文章图片

迭代 第二部分是迭代,那什么是迭代呢
我们通过for...in语句访问list或tuple中元素的过程就是迭代
add = [1,2,3,4,5] for x in add: print(x)

这个过程就是迭代,但不仅限于list结构
那什么数据可以迭代呢?如何判断呢?
我们需要调用collections.abc模块的Iterable类型
python|python高级特性
文章图片

这里说明字符串和list,tuple都可以进行迭代
这里要注意大小写,否则会如上报错
python|python高级特性
文章图片

之前我们使用for迭代都是一个元素,它也可以一次多个元素
python|python高级特性
文章图片

列表生成式 我们有时构建一些特殊的数列,比如[1,3,5,7,9]
我们凭借之前学的的知识先来实现一下
python|python高级特性
文章图片

但如果我们想构建[1,3,5,7,9]的平方呢?
python|python高级特性
文章图片

我们可以引申第二种方式来做
python|python高级特性
文章图片

但为了简化这一流程,便有了列表生成式
python|python高级特性
文章图片

一行代码就能搞定
python|python高级特性
文章图片

上述的列表生成式较之for...in,只是多了个x*x,我们还可以添加if判断
python|python高级特性
文章图片

修改前面的x*x,我们可以生成之前的[1,3,5,7,9]
python|python高级特性
文章图片

生成器和迭代器 生成器 我们上边学习了如何用列表生成式生成列表
但当我们数据很多时,如果调用时候一次生成整个list,对内存是极不友好的
我们只期望调出我们需要的一部分数据,这就是生成器产生的原因
python|python高级特性
文章图片

generator就是生成器,因此我们使用G来表示,只需要将列表生成器的[]改成()即可
我们通过next(生成器名)访问元素
python|python高级特性
文章图片

这里同样注意不要越界访问,否则报错
python|python高级特性
文章图片

也可以使用我们上边讲的迭代来遍历生成器
python|python高级特性
文章图片

我们上边讲了生成器的普通用法,那么今天给大家留一个问题
生成器在函数中是如何使用的?欢迎大家在评论区评论
python|python高级特性
文章图片

迭代器 我们上边讲了迭代,可以被for迭代的称作可迭代对象:Iterable
我们可以通过isinstance()接口判断一个数据类型是否为可迭代对象
listtupledictsetstr,generator都是可迭代对象
而能被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
那我们可得如图两者关系
python|python高级特性
文章图片

比如listdictstr虽是可迭代对象,却不是迭代器
那他们可以使用next()吗?
python|python高级特性
文章图片

答案是还有机会,我们使用iter()可将其变成迭代器
python|python高级特性
文章图片

python|python高级特性
文章图片


今天的内容就分享完了
期待积极评论
大家下次再见......???????

    推荐阅读