python_高级特征

放上原文:迭代器 · explore-python

一、迭代器(Iterator)

1.在 Python 中,迭代器是指遵循迭代器协议(iterator protocol)的对象

2.迭代(Iteration)与可迭代对象(Iterable)

3.可以使用Python 内置的 hasattr() 函数来判断一个对象是不是可迭代的;也可以使用 isinstance() 进行判断

4.我们熟知的字典(dict {})、元组(tuple ())、集合(set)、字符串对象('')和列表[],都是可迭代的,但他们不是迭代器

5.迭代器是指遵循迭代器协议(iterator protocol)的对象。

同样可以使用hasattr() 进行判断,【】

虽然元组、列表和字典等对象是可迭代的,但它们却不是迭代器!对于这些可迭代对象,可以使用 Python 内置的 iter() 函数获得它们的迭代器对象:

 6.

二、生成器(generator)

简言之,就是 next 使函数执行,yield 使函数暂停

进阶使用

三、上下文管理器

 

以上是with 语句执行过程没有出现异常的情况。

下面是出现异常的情况。

        在上面的例子中,方法__exit__中没有return语句,那么执行完该方法返回的是NONE。故按照前面讲的执行步骤,:“出现异常时,如果 __exit__(type, value, traceback) 返回 False 或 None,则会重新抛出异常,让 with 之外的语句逻辑来处理异常”

        对 __exit__ 方法做一些改动,加上return True。则不会返回异常。

内建对象使用 with 语句

contextlib 模块

 

① yield 产生的值赋给了 as 子句中的 value 变量。

② 执行with中的语句 print ('value is: %s' % value)

③ 执行yield后的语句 print('after yield')

        另外,需要强调的是,虽然通过使用 contextmanager 装饰器,我们可以不必再编写 __enter__ 和 __exit__ 方法,但是『获取』和『清理』资源的操作仍需要我们自己编写:『获取』资源的操作定义在 yield 语句之前,『释放』资源的操作定义在 yield 语句之后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值