java中的接口是类吗
384
2022-08-25
Python磨刀篇|迭代器、iter和next函数等(python iter next)
一、入门
在Python中可迭代对象主要是指可循环遍历的对象,例如str, list, tuple, dict, set等。这些对象在典型高级语言中可以使用类似for等循环语句进行遍历,但是也有一定局限性。而且,为了更为通用和高效率设计,引入了iter和next等专门用于实现可遍历对象的内置函数来实现遍历任务。
1、在Python2中情形:
2、在Python3中情形:
只允许使用一种情形:
二、可迭代对象(iterable)深入
定义了__iter__()方法或者__getitem__()方法的对象,就是可迭代的对象,比如list, tuple, dict, set,file(在每一行上迭代)等;
可以利用collections 中 Iterable 判断一个对象是否是可迭代的,也可以通过dir(my_list)来查看对象是否生成了__iter__()方法
from collections import Iterablemy_list = [1, 2, 3, 4]my_tuple = (1, 2, 3, 4)my_dict = {'a': 1, 'b':2}my_set = {1, 2, 3, 4}print(isinstance(my_list, Iterable)) # 返回Trueprint(isinstance(my_tuple, Iterable))# 返回Trueprint(isinstance(my_dict, Iterable)) # 返回Trueprint(isinstance(my_set, Iterable)) # 返回Trueprint("abc123", Iterable) # 返回Trueisinstance(open('arr.txt'), Iterable) # 返回True,前提是当前文件存在,因为执行此行时系统会先查找文件,若不存在先抛异常
注:判断一个对象是不是可迭代对象,利用isinstance(obj, Iterable)并不总是可靠的,该方法只检测对象是否实现了__iter__(), 对于那些仅仅实现了__getitem__()方法的对象,该方法就会失效。
因此,更为可靠的方法是:使用dir()方法并通过肉眼查看有没有实现__getitem__或者 __iter__(),或者调用iter()方法。当然,使用iter()方法,会有一些限制。请参考下面两个简单例子:
class A: def __iter__(self): passclass B: def __getitem__(self): passa = A()b = B()print(isinstance(a, Iterable)) # Trueprint(isinstance(b, Iterable)) # False, B 实现了__getitem__方法,但isinstance(o, Iterable)并没有检测出来
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~