python推导式、迭代器、生成器

一、推导式

1.列表推导式

#条件+判断
list1=["data{}".format(i) for i in range(100) if i%2==0]

#结合三目运算

list2=[True if i%2==0 else False for i in range(100)]

2.字典推导式

dict1={f"key{i}":i for i in range(10)}

二、迭代器

1.可迭代对象Iterable

"""
能够进行迭代逐一返回其成员项的对象称为可迭代对象。 可迭代对象的例子包括

#所有序列类型 :如 `list`、 `str` 和 `tuple`
#非序列类型: `dict`、`set`、`文件对象`
#实现了 `__iter__()` 方法的任意对象(可迭代协议)
#实现了序列语义的 `__getitem__()`方法的任意对象。

    **注意点:实现了`__getitem__`方法的被称为可迭代对象(支持迭代操作),但不是Iterable类型

"""
from collections.abc import Iterable, Iterator, Generator

class Mylist:
    """自定义的可迭代对象类"""
    def __iter__(self):
        return iter([11, 22, 33, 44])


class Mylist2:
    """自定义的序列类类"""
    li = [11, 22, 33, 44, 55]

    def __getitem__(self, item):
        return self.li[item]

if __name__ == '__main__':
    m = Mylist()
    print(isinstance(m, Iterable))
    #
    # for i in m:
    #     print(i)

    m2 = Mylist2()
    # print(m2[0])
    for i in m2:
        print(i)
    print(isinstance(m2, Iterable))

2.迭代器Iterator

"""
#1.1、迭代协议:对象定义了一个 `__iter__` 方法的,那么这个对象就实现了迭代协议,`__iter__`方法的返回值必须是一个迭代器

#1.2、迭代器协议: 迭代器协议由一个 `__iter__` 方法和`__next__`方法共同构成。实现了这两个方法的对象就实现了迭代器协议。

 #1、对象实现了迭代协议的对象

 #2、对象实现了`__next__`方法,`__next__`方法在迭代完所有数据之后,会抛出`StopIteration`的错误信息。

3、迭代器(Iterator)

# 1、实现了迭代器协议的对象,就是一个迭代器
# 2、所有的可迭代对象 都可以通过内置函数iter()转换为迭代器:
# 3、迭代器对象能够使用 内置函数next 进行迭代操作
# 4、所有的迭代器都是可迭代对象,因为迭代器协议包含了迭代协议

"""
#使用iter()方法可以将可迭代对象强制转换成迭代器
li1=iter([1,2,3])
print(next(li1))
print(li1.__next__())

三、生成器(元组没有推导式,元组推导式实际就是生成器)

生成器不保存数据,保存数据生成规则,节约内存

1.生成器表达式

ss=(i for i in range(10))

<generator object <genexpr> at 0x0000014EF438EB30>

#如何取生成器中的值

#方法1
print(next(ss))

#方法2
for i in ss:
    print(i)

2.生成器函数:在函数中通过关键字yield来实现生成器函数
def func01():
    print("----start----")
    yield
    print('----******----')
    yield 'python'
    print("----end------")

res = func01()
print(res)
---->
<generator object func01 at 0x000002C411D8E660>

res1=next(res)
print(res1)
---->
----start----
None

res2=next(res)
print(res2)
---->
----******----
python

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值