python对象数据类型Iterator与Sequece , Mapping and Set的区别

前言:
迭代器都是能够可迭代和具有__iter__属性的
但是能够可迭代和具有__iter__属性的不一定就是迭代器(iterator),它比迭代器要高一个等级。

iterator(迭代器)

必须有两种方法:

  • next:Return the next item from the container.
  • iter:Return the iterator object itself.

迭代器是一种python的数据类型,他通过有内置方法__next__进行不断的去取下一个值,减少内存的使用空间,很好的循环性能。

Sequence 和Mapping和Set类型

只有__iter__属性,没有__next__属性
Sequence:三种数据类型的总称

  • list
  • tuple
  • range

Set

  • set
  • frozenset:返回一个新的集合或frozenset对象,该对象的元素是从iterable中获取的

Mapping

  • dict字典

虽然Sequence,Mapping和Set是有迭代的功能,既具有__iter__属性,但是它们没有__next__属性。所以不属于迭代器,
如果测试一下:
print(isinstance(list,Iterator))它将返回一个False值,但是如果print(hasattr(test,'__iter__'))它将返回一个True,或者print(isinstance(test,Iterable))它也将返回一个True。

容器的学习

python中容器数据类型的总称为collections,这个模块实现了专门的容器数据类型,提供了Python通用内置容器、dict、列表、set和tuple的替代方法。

它有很多的属性,我们可以print(dir(collections))即可得到以下的数据:其中很多的对象类型classinfo我们都可以使用,借助isinstance(object, classinfo)来判断一个对象的对象信息。

['AsyncGenerator', 'AsyncIterable', 'AsyncIterator', 'Awaitable', 
'ByteString', 'Callable', 'ChainMap', 'Collection', 'Container', 
'Coroutine', 'Counter', 'Generator', 'Hashable', 'ItemsView', 
'Iterable', 'Iterator', 'KeysView', 'Mapping', 'MappingView', 
'MutableMapping', 'MutableSequence', 'MutableSet', 'OrderedDict', 
'Reversible', 'Sequence', 'Set', 'Sized', 'UserDict', 'UserList', 
'UserString', 'ValuesView', '_Link', '_OrderedDictItemsView', 
'_OrderedDictKeysView', '_OrderedDictValuesView', '__all__', 
'__builtins__', '__cached__', '__doc__', '__file__', '__loader__', 
'__name__', '__package__', '__path__', '__spec__', '_chain', 
'_class_template', '_collections_abc', '_count_elements', '_eq', 
'_field_template', '_heapq', '_iskeyword', '_itemgetter', '_proxy', 
'_recursive_repr', '_repeat', '_repr_template', '_starmap', '_sys', 
'abc', 'defaultdict', 'deque', 'namedtuple']

参考:The Python Library Reference Release 3.6.6

猜你喜欢

转载自blog.csdn.net/qq_28485501/article/details/85340474