python的学习 高级特性(第二天)(较难)

1.列表生成式(List Comprehensions)

列表生成式,是python内置的用来创建list的生成式。

创建最简单的有从1-n的列表使用list(range(1,n+1)),这是最简单的生成式;

较为复杂的通常使用一个特定的公式:例:

[s.lower() for s in L if isinstance(s,str)]

该公式分为三部分,用‘[]’包裹

第一部分‘s.lower()’,代表输出列表中每个元素的值(通过一个简单的函数计算获取);

第二部分‘for s in L’,代表如何获取第一部分函数中参数

第三部分‘if isinstance(s,str)’,代表如何对获取的参数进一步筛选

注意:即使第一部分为参数本身也不可省略;

注意:当第一部分参数较多时(一般两个),可用两个‘for...in ’分别获取。

2.生成器(generator)

生成器是我们通过循环不断推算获得元素的一种方式(可理解为一种数据类型);

生成器是通过next(g)获取名为g的generator的每一个元素,一次仅能获取一个;

因此往往直接通过for循环的方式来迭代。

生成器的创建有两种方式:

第一种,与创建生成式列表的方法相同,仅仅将包裹的‘[]’变成‘()’即可;

直接打印生成器仅能得到这个对象,而不是其中的值,获取值仍要用next(g)或for循环。

第二种,当推算的方式较复杂时,要使用定义函数的方式来创建;

定义generator是使用yield(翻译:生成)语句来返回每一个生成器元素;

要获取生成器中的值,仍要使用next(g)或for循环。

注意:虽然生成器采用for循环获取其中的元素值,但实质还是next()方式的循环。

3.迭代器(iterator)

可使用for循环的对象都是Iterable(迭代)类型;(注释:首字母I为i的大写)

而其中,是使用next()方式获取元素的值的对象,都是Iterator(迭代器)类型;

判断是否为迭代器类型的方法,与判断是否是迭代类型的方法类似;

 

可以通过collections模块的Iterator类型来判断:

 

>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False

将类型为迭代的数据转为类型为迭代器的,可以通过iter()函数来实现。

注意:next()获取值的方式是惰性方式,即每次获取一个元素值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值