python高级特性

大家好,这里是长弓

前几篇我们学习了python的基础语法和函数

开发应用时,我们都期望一个较高的开发效率及较少的代码量

因此,今天我们来学python的高级特性

                                          python高级特性_第1张图片

目录

切片

list与tuple切片

str切片

迭代

列表生成式

生成器和迭代器

生成器

 迭代器


切片

list与tuple切片

我们之前学习了list和tuple,常常需要提取其中的元素,我们实践一下

我们先看前两行,最基础的,我们构建一个新list,从L中取出元素放进去

python高级特性_第2张图片

 但这个方法是不可以延申的,比如我们想取出3个数据,或4个数据呢?

我们可以使用下面循环的方法,只需要改变n的数值,便可以对应取出的元素

但每次都写这串代码,未必太过琐碎了,因此人们想出了更好的方法,切片

                                            python高级特性_第3张图片

 python高级特性_第4张图片

 这便是L = ['张三','李四','王五','赵六']的切片操作,我们知道list可以从下标取出对应元素,,L[0:3]就是取出,下标为0,1,2的元素,即不包括3.第二行说明为0时可省略。

list[-1]是list中的最后一个元素,这里也可以使用,L[-2:]就是倒数第二个元素到最后一个元素,L[-2:-1]则又是最后一个元素前,故不包含'赵六'。

str切片

最后,不仅是list和tuple可以进行切片操作,str字符串类型也可以

第一种是读取前4个元素,第二个是隔3个元素一读取。

                                               python高级特性_第5张图片

 最后,我们可以想想为什么叫它切片呢?

比如这个 'ABCDEFG'[:4],我们在源数据整体取了一部分,可不就像从火腿上切了一片下来(这里数据太少应该叫切段)

python高级特性_第6张图片

迭代

第二部分是迭代,那什么是迭代呢

我们通过for...in语句访问list或tuple中元素的过程就是迭代

add = [1,2,3,4,5]
for x in add:
    print(x)

这个过程就是迭代,但不仅限于list结构

那什么数据可以迭代呢?如何判断呢?

我们需要调用collections.abc模块的Iterable类型

python高级特性_第7张图片

这里说明字符串和list,tuple都可以进行迭代

这里要注意大小写,否则会如上报错

                                 python高级特性_第8张图片 

 之前我们使用for迭代都是一个元素,它也可以一次多个元素

python高级特性_第9张图片

列表生成式

我们有时构建一些特殊的数列,比如[1,3,5,7,9]

我们凭借之前学的的知识先来实现一下

python高级特性_第10张图片

但如果我们想构建[1,3,5,7,9]的平方呢?

python高级特性_第11张图片

我们可以引申第二种方式来做

python高级特性_第12张图片  

 但为了简化这一流程,便有了列表生成式

一行代码就能搞定 

                                           python高级特性_第13张图片

 上述的列表生成式较之for...in,只是多了个x*x,我们还可以添加if判断

修改前面的x*x,我们可以生成之前的[1,3,5,7,9]

生成器和迭代器

生成器

我们上边学习了如何用列表生成式生成列表

但当我们数据很多时,如果调用时候一次生成整个list,对内存是极不友好的

我们只期望调出我们需要的一部分数据,这就是生成器产生的原因

python高级特性_第14张图片

generator就是生成器,因此我们使用G来表示,只需要将列表生成器的[]改成()即可

 我们通过next(生成器名)访问元素

python高级特性_第15张图片

这里同样注意不要越界访问,否则报错

                                           python高级特性_第16张图片 

也可以使用我们上边讲的迭代来遍历生成器

python高级特性_第17张图片 

 我们上边讲了生成器的普通用法,那么今天给大家留一个问题

生成器在函数中是如何使用的?欢迎大家在评论区评论

                                         python高级特性_第18张图片

 迭代器

我们上边讲了迭代,可以被for迭代的称作可迭代对象:Iterable

我们可以通过isinstance()接口判断一个数据类型是否为可迭代对象

listtupledictsetstr,generator都是可迭代对象

而能next()函数调用并不断返回下一个值的对象称为迭代器Iterator

那我们可得如图两者关系

python高级特性_第19张图片

比如listdictstr虽是可迭代对象,却不是迭代器

那他们可以使用next()吗?

python高级特性_第20张图片 

答案是还有机会,我们使用iter()可将其变成迭代器

 python高级特性_第21张图片

 python高级特性_第22张图片

今天的内容就分享完了

期待积极评论

大家下次再见......​​​​​​​

你可能感兴趣的:(python,python)